コード例 #1
0
ファイル: changraph.c プロジェクト: 5432935/crossbridge
void exploreUp(void)
{

DLINK2PTR beptr ;
int beg , end , left , rite , finishLine , b , l , r , rec , index ;

for( rec = 1 ; rec <= numRects ; rec++ ) {
    beg  = rectArray[rec].b ;
    end  = rectArray[rec].t ;
    rite = rectArray[rec].r ;
    left = rectArray[rec].l ;
    finishLine = 1000000 ;
    beptr = BEptrs[ tprop( BEroot , beg ) ] ;
    for( ; beptr != (DLINK2PTR) NULL; beptr = beptr->next ){
	index = beptr->index ;
	b = rectArray[index].b ;
	if( b > finishLine ) {
	    break ;
	}
	l = rectArray[index].l ;
	r = rectArray[index].r ;
	if( b <= end || l > rite || r < left ) {
	    continue ;
	}
	if( constructVedge( rec , index ) ) {
	    break ;
	}
	finishLine = rectArray[index].t ;
    }
}
return ;
}
コード例 #2
0
ファイル: changraph.c プロジェクト: 5432935/crossbridge
void exploreRite(void)
{

DLINK2PTR leptr ;
int beg , end , top , bot , finishLine , l , b , t , rec , index ;

for( rec = 1 ; rec <= numRects ; rec++ ) {
    beg = rectArray[rec].l ;
    end = rectArray[rec].r ;
    top = rectArray[rec].t ;
    bot = rectArray[rec].b ;
    finishLine = 1000000 ;
    leptr = LEptrs[ tprop( LEroot , beg ) ] ;
    for( ; leptr != (DLINK2PTR) NULL; leptr = leptr->next ){
	index = leptr->index ;
	l = rectArray[index].l ;
	if( l > finishLine ) {
	    break ;
	}
	b = rectArray[index].b ;
	t = rectArray[index].t ;
	if( l <= end || b > top || t < bot ) {
	    continue ;
	}
	if( constructHedge( rec , index ) ) {
	    break ;
	}
	finishLine = rectArray[index].r ;
    }
}
return ;
}
コード例 #3
0
ファイル: changraph.c プロジェクト: 5432935/crossbridge
int constructHedge( int index1 , int index2 )
{

DLINK1PTR h1ptr , h2ptr , hptr ;
int b1 , b2 , t1 , t2 , b , l , r , t , edge1 , edge2 , eb , et ;
int el , er , el1 , er1 , el2 , er2 ;
int edge , x ;

b1 = rectArray[index1].b ;
t1 = rectArray[index1].t ;
b2 = rectArray[index2].b ;
t2 = rectArray[index2].t ;
b = ( b1 >= b2 ) ? b1 : b2 ;
t = ( t1 <= t2 ) ? t1 : t2 ;
l = rectArray[index1].r ; 
r = rectArray[index2].l ; 

eb = -1000000 ;
h1ptr = HRptrs[ tprop( HRroot , b ) ] ;
for( ; h1ptr != (DLINK1PTR) NULL; h1ptr = h1ptr->next ) {
    edge1 = h1ptr->edge ;
    if( edgeList[edge1].loc > t ) {
	break ;
    }
    if( edgeList[edge1].UorR < 0 ) {
	continue ;
    }
    if( edgeList[edge1].start > l || edgeList[edge1].end < r ) {
	continue ;
    }
    eb = edgeList[edge1].loc ;
    hptr = h1ptr ;
}
if( eb == -1000000 ) {
    return(0) ;
}
h2ptr = Hptrs[ tprop( Hroot , eb ) ] ;
for( ; h2ptr != (DLINK1PTR) NULL; h2ptr = h2ptr->next ) {
    edge2 = h2ptr->edge ;
    if( edgeList[edge2].UorR > 0 ) {
	continue ;
    }
    if( edgeList[edge2].start > l || edgeList[edge2].end < r ) {
	continue ;
    }
    et = edgeList[edge2].loc ;
    break ;
}
if( et > t ) {
    return(0) ;
}
h1ptr = hptr ;
edge1 = h1ptr->edge ;

er1 = edgeList[edge1].end ;
el1 = edgeList[edge1].start ;
er2 = edgeList[edge2].end ;
el2 = edgeList[edge2].start ;
if( edgeList[edge1].fixed == 1 && edgeList[edge2].fixed == 1 ) {
    if( edgeList[edge1].cell > 0 && edgeList[edge2].cell > 0 ) {
	er = (er1 >= er2) ? er1 : er2 ;
	el = (el1 <= el2) ? el1 : el2 ;
    } else if( edgeList[edge1].cell > 0 ) {
	er = er1 ;
	el = el1 ;
    } else if( edgeList[edge2].cell > 0 ) {
	er = er2 ;
	el = el2 ;
    } else {
	er = 1000000 ;
	el = -1000000 ;
    }
} else if( edgeList[edge1].fixed == 1 ) {
    if( edgeList[edge1].cell > 0 ) {
	er = er1 ;
	el = el1 ;
    } else {
	er = 1000000 ;
	el = -1000000 ;
    }
} else if( edgeList[edge2].fixed == 1 ) {
    if( edgeList[edge2].cell > 0 ) {
	er = er2 ;
	el = el2 ;
    } else {
	er = 1000000 ;
	el = -1000000 ;
    }
} else {
    er = 1000000 ;
    el = -1000000 ;
}
if( ! ( er > rectArray[index2].r ) ){
    if( rectArray[index2].xc < er ) {
	rectArray[index2].xc = er ;
	rectArray[index2].xreset = 2 ;
    }
}
if( ! ( el < rectArray[index1].l ) ){
    if( rectArray[index1].xc > el ) {
	rectArray[index1].xc = el ;
	rectArray[index1].xreset = 1 ;
    }
}
if( rectArray[index1].yc < eb || rectArray[index1].yc > et ) {
    rectArray[index1].yc = (eb + et) / 2 ;
}
if( rectArray[index2].yc < eb || rectArray[index2].yc > et ) {
    rectArray[index2].yc = (eb + et) / 2 ;
}

if( edgeList[edge1].fixed == 0 ) {
    hptr = Hptrs[ tprop( Hroot , eb ) ] ;
    x = edgeList[hptr->edge].loc ;
    hptr = hptr->next ;
    for( ; hptr != (DLINK1PTR) NULL; hptr = hptr->next ) {
	if( edgeList[hptr->edge].loc > x ) {
	    break ;
	}
    }
    for( hptr = hptr->prev; hptr != (DLINK1PTR) NULL; 
					    hptr = hptr->prev ) {
	if( hptr == h2ptr ) {
	    continue ;
	}
	edge = hptr->edge ;
	if( edgeList[edge].UorR > 0 ) {
	    continue ;
	}
	if( edgeList[edge].start > l || edgeList[edge].end < r ) {
	    continue ;
	}
	break ;
    }
    eb -= (eb - edgeList[edge].loc) - (eb - edgeList[edge].loc) / 2 ;
}
if( edgeList[edge2].fixed == 0 ) {
    hptr = Hptrs[ tprop( Hroot , et ) ] ;
    for(; hptr != (DLINK1PTR) NULL; hptr = hptr->next ) {
	if( hptr == h1ptr ) {
	    continue ;
	}
	edge = hptr->edge ;
	if( edgeList[edge].UorR < 0 ) {
	    continue ;
	}
	if( edgeList[edge].start > l || edgeList[edge].end < r ) {
	    continue ;
	}
	break ;
    }
    et += (edgeList[edge].loc - et) / 2 ;
}

if( ++eNum % 100 == 0 ) {
    eArray = (EBOXPTR) realloc( eArray, (eNum + 100) * sizeof(EBOX));
}
eArray[eNum].index1 = index1 ;
eArray[eNum].index2 = index2 ;
eArray[eNum].width  = et - eb ;
eArray[eNum].lbside = eb ;
eArray[eNum].rtside = et ;
eArray[eNum].edge1 = edge1 ;
eArray[eNum].edge2 = edge2 ;

return(1) ;
}
コード例 #4
0
ファイル: changraph.c プロジェクト: 5432935/crossbridge
int constructVedge( int index1 , int index2 )
{

DLINK1PTR v1ptr , v2ptr , vptr ;
int l1 , l2 , r1 , r2 , l , r , b , t , edge1 , edge2 , el , er ;
int eb , et , eb1 , et1 , eb2 , et2 ;
int edge , x ;

l1 = rectArray[index1].l ;
r1 = rectArray[index1].r ;
l2 = rectArray[index2].l ;
r2 = rectArray[index2].r ;
l = ( l1 >= l2 ) ? l1 : l2 ;
r = ( r1 <= r2 ) ? r1 : r2 ;
b = rectArray[index1].t ; 
t = rectArray[index2].b ; 

el = -1000000 ;
v1ptr = VDptrs[ tprop( VDroot , l ) ] ;
for( ; v1ptr != (DLINK1PTR) NULL; v1ptr = v1ptr->next ) {
    edge1 = v1ptr->edge ;
    if( edgeList[edge1].loc > r ) {
	break ;
    }
    if( edgeList[edge1].UorR > 0 ) {
	continue ;
    }
    if( edgeList[edge1].start > b || edgeList[edge1].end < t ) {
	continue ;
    }
    el = edgeList[edge1].loc ;
    vptr = v1ptr ;
}
if( el == -1000000 ) {
    return(0) ;
}
v2ptr = Vptrs[ tprop( Vroot , el ) ] ;
for( ; v2ptr != (DLINK1PTR) NULL; v2ptr = v2ptr->next ) {
    edge2 = v2ptr->edge ;
    if( edgeList[edge2].UorR < 0 ) {
	continue ;
    }
    if( edgeList[edge2].start > b || edgeList[edge2].end < t ) {
	continue ;
    }
    er = edgeList[edge2].loc ;
    break ;
}
if( er > r ) {
    return(0) ;
}
v1ptr = vptr ;
edge1 = v1ptr->edge ;

et1 = edgeList[edge1].end ;
eb1 = edgeList[edge1].start ;
et2 = edgeList[edge2].end ;
eb2 = edgeList[edge2].start ;
if( edgeList[edge1].fixed == 1 && edgeList[edge2].fixed == 1 ) {
    if( edgeList[edge1].cell > 0 && edgeList[edge2].cell > 0 ) {
	et = (et1 >= et2) ? et1 : et2 ;
	eb = (eb1 <= eb2) ? eb1 : eb2 ;
    } else if( edgeList[edge1].cell > 0 ) {
	et = et1 ;
	eb = eb1 ;
    } else if( edgeList[edge2].cell > 0 ) {
	et = et2 ;
	eb = eb2 ;
    } else {
	et = 1000000 ;
	eb = -1000000 ;
    }
} else if( edgeList[edge1].fixed == 1 ) {
    if( edgeList[edge1].cell > 0 ) {
	et = et1 ;
	eb = eb1 ;
    } else {
	et = 1000000 ;
	eb = -1000000 ;
    }
} else if( edgeList[edge2].fixed == 1 ) {
    if( edgeList[edge2].cell > 0 ) {
	et = et2 ;
	eb = eb2 ;
    } else {
	et = 1000000 ;
	eb = -1000000 ;
    }
} else {
    et = 1000000 ;
    eb = -1000000 ;
}
if( ! ( et > rectArray[index2].t ) ){
    if( rectArray[index2].yc < et ) {
	rectArray[index2].yc = et ;
	rectArray[index2].yreset = 2 ;
    }
}
if( ! ( eb < rectArray[index1].b ) ){
    if( rectArray[index1].yc > eb ) {
	rectArray[index1].yc = eb ;
	rectArray[index1].yreset = 1 ;
    }
}
if( rectArray[index1].xc < el || rectArray[index1].xc > er ) {
    rectArray[index1].xc = (el + er) / 2 ;
}
if( rectArray[index2].xc < el || rectArray[index2].xc > er ) {
    rectArray[index2].xc = (el + er) / 2 ;
}

if( edgeList[edge1].fixed == 0 ) {
    vptr = Vptrs[ tprop( Vroot , el ) ] ;
    x = edgeList[vptr->edge].loc ;
    vptr = vptr->next ;
    for( ; vptr != (DLINK1PTR) NULL; vptr = vptr->next ) {
	if( edgeList[vptr->edge].loc > x ) {
	    break ;
	}
    }
    for( vptr = vptr->prev; vptr != (DLINK1PTR) NULL; 
					    vptr = vptr->prev ) {
	if( vptr == v2ptr ) {
	    continue ;
	}
	edge = vptr->edge ;
	if( edgeList[edge].UorR < 0 ) {
	    continue ;
	}
	if( edgeList[edge].start > b || edgeList[edge].end < t ) {
	    continue ;
	}
	break ;
    }
    el -= (el - edgeList[edge].loc) - (el - edgeList[edge].loc) / 2 ;
}
if( edgeList[edge2].fixed == 0 ) {
    vptr = Vptrs[ tprop( Vroot , er ) ] ;
    for(; vptr != (DLINK1PTR) NULL; vptr = vptr->next ) {
	if( vptr == v1ptr ) {
	    continue ;
	}
	edge = vptr->edge ;
	if( edgeList[edge].UorR > 0 ) {
	    continue ;
	}
	if( edgeList[edge].start > b || edgeList[edge].end < t ) {
	    continue ;
	}
	break ;
    }
    er += (edgeList[edge].loc - er) / 2 ;
}

if( ++eNum % 100 == 0 ) {
    eArray = (EBOXPTR) realloc( eArray, (eNum + 100) * sizeof(EBOX));
}
eArray[eNum].index1 = index1 ;
eArray[eNum].index2 = index2 ;
eArray[eNum].width  = er - el ;
eArray[eNum].lbside = el ;
eArray[eNum].rtside = er ;
eArray[eNum].edge1 = edge1 ;
eArray[eNum].edge2 = edge2 ;

return(1) ;
}
コード例 #5
0
ファイル: vprobes.c プロジェクト: ChunHungLiu/timberwolf
vprobes()
{

DLINK1PTR ritePtr , left1ptr , left2ptr , checkPtr , ptr ;
int ry , rx1 , rx2 , redge , dx1 , dx2 , ledge , edge , check ;
int l1x2 , l1x1 , l1y , l2x2 , l2x1 , l2y ;

ritePtr = hFixedListG ;
for( ; ritePtr != (DLINK1PTR) NULL ; ritePtr = ritePtr->next ) {
    redge = ritePtr->edge ;
    if( edgeListG[redge].UorR < 0 ) {
	continue ;
    }
    ry  = edgeListG[redge].loc   ;
    rx1 = edgeListG[redge].start ;
    rx2 = edgeListG[redge].end   ;
    
    left1ptr = HptrsG[ tprop( HrootG , ry ) ] ;
    for(; left1ptr != (DLINK1PTR)NULL; left1ptr = left1ptr->next){
	ledge = left1ptr->edge ;
	if( edgeListG[ledge].UorR > 0 ) {
	    continue ;
	}
	l1y  = edgeListG[ledge].loc   ;
	l1x1 = edgeListG[ledge].start ;
	l1x2 = edgeListG[ledge].end   ;
	if( l1x2 <= rx1 || l1x1 > rx1 ) {
	    continue ;
	}
	break ;
    }
    
    left2ptr = HptrsG[ tprop( HrootG , ry ) ] ;
    for(; left2ptr != (DLINK1PTR) NULL ; left2ptr = left2ptr->next){
	ledge = left2ptr->edge ;
	if( edgeListG[ledge].UorR > 0 ) {
	    continue ;
	}
	l2y  = edgeListG[ledge].loc   ;
	l2x1 = edgeListG[ledge].start ;
	l2x2 = edgeListG[ledge].end   ;
	if( l2x2 < rx2 || l2x1 >= rx2 ) {
	    continue ;
	}
	break ;
    }

    if( left1ptr != (DLINK1PTR) NULL && left1ptr == left2ptr ) {
	check = 1 ;
	checkPtr = HptrsG[ tprop( HrootG , ry ) ] ;
	for(; checkPtr != (DLINK1PTR)NULL; checkPtr = checkPtr->next){
	    if( edgeListG[ checkPtr->edge ].UorR > 0 ) {
		continue ;
	    }
	    if( edgeListG[ checkPtr->edge ].loc >= l2y ) {
		break ;
	    }
	    if( edgeListG[ checkPtr->edge ].start >= rx2 ||
			edgeListG[ checkPtr->edge ].end <= rx1 ) {
		continue ;
	    }
	    check = 0 ;
	    break ;
	}
	if( check ) {
	    edgeListG[++numProbesG + edgeCountG].start  = ry ;
	    edgeListG[numProbesG + edgeCountG].end      = l2y  ;
	    edgeListG[numProbesG + edgeCountG].loc      = rx1 ;
	    edgeListG[numProbesG + edgeCountG].length   = l2y - ry ;
	    edgeListG[numProbesG + edgeCountG].fixed    = 0 ;
	    edgeListG[numProbesG + edgeCountG].cell     = 0 ;
	    edgeListG[numProbesG + edgeCountG].UorR     = 1 ;
	    tinsert( &vEdgeRootG, rx1 , numProbesG + edgeCountG ) ;
#ifdef DEBUG
	    fprintf(fpdebugG,"vprobe:%d  ", numProbesG ) ;
	    fprintf(fpdebugG,"start:%d  end:%d  loc:%d  UorR:%d\n",
					ry , l2y , rx1 , 1 ) ;
#endif
	    edgeListG[++numProbesG + edgeCountG].start  = ry ;
	    edgeListG[numProbesG + edgeCountG].end      = l2y  ;
	    edgeListG[numProbesG + edgeCountG].loc      = rx2 ;
	    edgeListG[numProbesG + edgeCountG].length   = l2y - ry ;
	    edgeListG[numProbesG + edgeCountG].fixed    = 0 ;
	    edgeListG[numProbesG + edgeCountG].cell     = 0 ;
	    edgeListG[numProbesG + edgeCountG].UorR     = -1 ;
	    tinsert( &vEdgeRootG, rx2 , numProbesG + edgeCountG ) ;
#ifdef DEBUG
	    fprintf(fpdebugG,"vprobe:%d  ", numProbesG ) ;
	    fprintf(fpdebugG,"start:%d  end:%d  loc:%d  UorR:%d\n",
					ry , l2y , rx2 , -1 ) ;
#endif
	} else {
	    doubleDown( ritePtr ) ;	
	}
	continue ;
    }

    if( left1ptr != (DLINK1PTR) NULL ) {
	ptr = HptrsG[ tprop( HrootG , l1y ) ] ;
	for( ptr = ptr->next; ptr != (DLINK1PTR) NULL; ptr = ptr->next){
	    if( edgeListG[ptr->edge].loc > l1y ) {
		break ;
	    }
	}
	if( ptr == (DLINK1PTR) NULL ) {
	    ptr = hFixedEndG ;
	} else {
	    ptr = ptr->prev ;
	}
	for( ; ptr != (DLINK1PTR) NULL; ptr = ptr->prev){
	    edge = ptr->edge ;
	    if( edgeListG[edge].UorR < 0 ) {
		continue ;
	    }
	    dx1 = edgeListG[edge].start ;
	    dx2 = edgeListG[edge].end   ;
	    if( dx2 < l1x2 || dx1 >= l1x2 ) {
		continue ;
	    }
	    break ;
	}
	if( ritePtr == ptr ) {
	    check = 1 ;
	    checkPtr = HptrsG[ tprop( HrootG , ry ) ] ;
	    for(; checkPtr != (DLINK1PTR) NULL ;
				checkPtr = checkPtr->next ) {
		if( edgeListG[ checkPtr->edge ].UorR > 0 ) {
		    continue ;
		}
		if( edgeListG[ checkPtr->edge ].loc >= l1y ) {
		    break ;
		}
		if( edgeListG[ checkPtr->edge ].start >= l1x2 ||
			edgeListG[ checkPtr->edge ].end <= rx1 ) {
		    continue ;
		}
		check = 0 ;
		break ;
	    }
	    if( check ) {
		edgeListG[++numProbesG + edgeCountG].start  = ry ;
		edgeListG[numProbesG + edgeCountG].end      = l1y ;
		edgeListG[numProbesG + edgeCountG].loc      = rx1 ;
		edgeListG[numProbesG + edgeCountG].length   = l1y - ry ;
		edgeListG[numProbesG + edgeCountG].fixed    = 0 ;
		edgeListG[numProbesG + edgeCountG].cell     = 0 ;
		edgeListG[numProbesG + edgeCountG].UorR     = 1 ;
		tinsert( &vEdgeRootG, rx1 , numProbesG + edgeCountG ) ;
#ifdef DEBUG
		fprintf(fpdebugG,"vprobe:%d  ", numProbesG ) ;
		fprintf(fpdebugG,"start:%d  end:%d  loc:%d  UorR:%d\n",
					ry , l1y , rx1 , 1 ) ;
#endif
		edgeListG[++numProbesG + edgeCountG].start  = ry ;
		edgeListG[numProbesG + edgeCountG].end      = l1y  ;
		edgeListG[numProbesG + edgeCountG].loc      = l1x2 ;
		edgeListG[numProbesG + edgeCountG].length   = l1y - ry ;
		edgeListG[numProbesG + edgeCountG].fixed    = 0 ;
		edgeListG[numProbesG + edgeCountG].cell     = 0 ;
		edgeListG[numProbesG + edgeCountG].UorR     = -1 ;
		tinsert( &vEdgeRootG, l1x2 , numProbesG + edgeCountG ) ;
#ifdef DEBUG
		fprintf(fpdebugG,"vprobe:%d  ", numProbesG ) ;
		fprintf(fpdebugG,"start:%d  end:%d  loc:%d  UorR:%d\n",
					ry , l1y , l1x2 , -1 ) ;
#endif
	    }
	}
    }

    if( left2ptr != (DLINK1PTR) NULL ) {
	ptr = HptrsG[ tprop( HrootG , l2y ) ] ;
	for( ptr = ptr->next; ptr != (DLINK1PTR) NULL; ptr = ptr->next){
	    if( edgeListG[ptr->edge].loc > l2y ) {
		break ;
	    }
	}
	if( ptr == (DLINK1PTR) NULL ) {
	    ptr = hFixedEndG ;
	} else {
	    ptr = ptr->prev ;
	}
	for( ; ptr != (DLINK1PTR) NULL; ptr = ptr->prev){
	    edge = ptr->edge ;
	    if( edgeListG[edge].UorR < 0 ) {
		continue ;
	    }
	    dx1 = edgeListG[edge].start ;
	    dx2 = edgeListG[edge].end   ;
	    if( dx2 <= l2x1 || dx1 > l2x1 ) {
		continue ;
	    }
	    break ;
	}
	if( ritePtr == ptr ) {
	    check = 1 ;
	    checkPtr = HptrsG[ tprop( HrootG , ry ) ] ;
	    for(; checkPtr != (DLINK1PTR) NULL ;
				    checkPtr = checkPtr->next ) {
		if( edgeListG[ checkPtr->edge ].UorR > 0 ) {
		    continue ;
		}
		if( edgeListG[ checkPtr->edge ].loc >= l2y ) {
		    break ;
		}
		if( edgeListG[ checkPtr->edge ].start >= rx2 ||
			edgeListG[ checkPtr->edge ].end <= l2x1 ) {
		    continue ;
		}
		check = 0 ;
		break ;
	    }
	    if( check ) {
		edgeListG[++numProbesG + edgeCountG].start  = ry ;
		edgeListG[numProbesG + edgeCountG].end      = l2y ;
		edgeListG[numProbesG + edgeCountG].loc      = l2x1 ;
		edgeListG[numProbesG + edgeCountG].length   = l2y - ry ;
		edgeListG[numProbesG + edgeCountG].fixed    = 0 ;
		edgeListG[numProbesG + edgeCountG].cell     = 0 ;
		edgeListG[numProbesG + edgeCountG].UorR     = 1 ;
		tinsert( &vEdgeRootG, l2x1 , numProbesG + edgeCountG ) ;
#ifdef DEBUG
		fprintf(fpdebugG,"vprobe:%d  ", numProbesG ) ;
		fprintf(fpdebugG,"start:%d  end:%d  loc:%d  UorR:%d\n",
					ry , l2y , l2x1 , 1 ) ;
#endif
		edgeListG[++numProbesG + edgeCountG].start  = ry ;
		edgeListG[numProbesG + edgeCountG].end      = l2y  ;
		edgeListG[numProbesG + edgeCountG].loc      = rx2 ;
		edgeListG[numProbesG + edgeCountG].length   = l2y - ry ;
		edgeListG[numProbesG + edgeCountG].fixed    = 0 ;
		edgeListG[numProbesG + edgeCountG].cell     = 0 ;
		edgeListG[numProbesG + edgeCountG].UorR     = -1 ;
		tinsert( &vEdgeRootG, rx2 , numProbesG + edgeCountG ) ;
#ifdef DEBUG
		fprintf(fpdebugG,"vprobe:%d  ", numProbesG ) ;
		fprintf(fpdebugG,"start:%d  end:%d  loc:%d  UorR:%d\n",
					ry , l2y , rx2 , -1 ) ;
#endif
	    }
	}
    }
    doubleDown( ritePtr ) ;
}
return ;
}