| 1353 | | chroot(tr, s1, s2) |
| 1354 | | Tree *tr; |
| 1355 | | int s1, s2; |
| 1356 | | { |
| 1357 | | Node *rp, *cp, *op, *xp, *yp; |
| 1358 | | |
| 1359 | | if (Outgr_optn == 2) { |
| 1360 | | } else { |
| 1361 | | } |
| 1362 | | |
| 1363 | | rp = tr->ebrnchp[s1]->kinp; |
| 1364 | | cp = rp; |
| 1365 | | do { |
| 1366 | | cp = cp->isop->kinp; |
| 1367 | | if (cp->isop == NULL) { /* external node */ |
| 1368 | | cp->descen = TRUE; |
| 1369 | | cp = cp->kinp; |
| 1370 | | cp->descen = FALSE; |
| 1371 | | } else { /* internal node */ |
| 1372 | | if (cp->descen != -1) { |
| 1373 | | cp->descen = TRUE; |
| 1374 | | cp->kinp->descen = -1; |
| 1375 | | tr->ibrnchp[cp->num - Maxspc] = cp; |
| 1376 | | } else { |
| 1377 | | cp->descen = FALSE; |
| 1378 | | } |
| 1379 | | if (!cp->descen) { |
| 1380 | | op = cp->kinp; |
| 1381 | | xp = op->isop; |
| 1382 | | yp = xp->isop; |
| 1383 | | if (xp->num > yp->num) { |
| 1384 | | op->isop = yp; |
| 1385 | | yp->isop = xp; |
| 1386 | | xp->isop = op; |
| 1387 | | } |
| 1388 | | cp->num = op->isop->num; |
| 1389 | | xp->num = xp->kinp->num; |
| 1390 | | yp->num = yp->kinp->num; |
| 1391 | | } |
| 1392 | | } |
| 1393 | | } while (cp != rp); |
| 1394 | | op = cp; |
| 1395 | | xp = op->isop; |
| 1396 | | yp = xp->isop; |
| 1397 | | if (xp->num > yp->num) { |
| 1398 | | op->isop = yp; |
| 1399 | | yp->isop = xp; |
| 1400 | | xp->isop = op; |
| 1401 | | } |
| 1402 | | xp->num = xp->kinp->num; |
| 1403 | | yp->num = yp->kinp->num; |
| 1404 | | op->num = op->kinp->num; |
| 1405 | | } /* chroot */ |
| 1406 | | |
| 1407 | | |
| 1408 | | void |