* * $Id: treaud.F,v 1.1.1.1 1996/04/01 15:03:25 mclareni Exp $ * * $Log: treaud.F,v $ * Revision 1.1.1.1 1996/04/01 15:03:25 mclareni * Mathlib gen * * #include "gen/pilot.h" SUBROUTINE TREAUD (PARENT,OLDSTR,NEWBUC,NEWMAX,TREE) INTEGER PARENT,OLDSTR,NEWBUC,NEWMAX,TREE(4,1000),SON INTEGER SNODES(100) INTEGER PNODES,MNODES IF(100.GT.100) GOTO 250 PNODES=0 MNODES=100 PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 210 SNODES(PNODES)=PARENT 10 IF(OLDSTR.GT.TREE(1,PARENT)) GOTO 40 IF(PNODES.LE.0) GOTO 200 PARENT=SNODES(PNODES) IF(TREE(4,PARENT).GE.0) GOTO 20 SON=TREE(2,PARENT) GOTO 30 20 SON=TREE(3,PARENT) 30 IF(SON.LE.0) GOTO 70 PARENT=SON PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 210 SNODES(PNODES)=PARENT GOTO 70 40 IF(PNODES.LE.0) GOTO 200 PARENT=SNODES(PNODES) IF(TREE(4,PARENT).LE.0) GOTO 50 SON=TREE(2,PARENT) GOTO 60 50 SON=TREE(3,PARENT) 60 IF(SON.LE.0) GOTO 70 PARENT=SON PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 210 SNODES(PNODES)=PARENT 70 IF(SON.GE.0) GOTO 10 IF(OLDSTR.NE.-SON) GOTO 290 GOTO 80 80 IF(SON.LT.0) GOTO 110 IF(PNODES.LE.0) GOTO 200 PARENT=SNODES(PNODES) IF(TREE(4,PARENT).GE.0) GOTO 90 SON=TREE(2,PARENT) GOTO 100 90 SON=TREE(3,PARENT) 100 IF(SON.LE.0) GOTO 80 PARENT=SON PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 210 SNODES(PNODES)=PARENT GOTO 80 110 IF(TREE(4,PARENT).GE.0) GOTO 130 IF(SON.NE.TREE(3,PARENT)) GOTO 120 TREE(3,PARENT)=-NEWBUC GOTO 150 120 TREE(2,PARENT)=-NEWBUC GOTO 150 130 IF(SON.NE.TREE(2,PARENT)) GOTO 140 TREE(2,PARENT)=-NEWBUC GOTO 150 140 TREE(3,PARENT)=-NEWBUC 150 SON=-NEWBUC 160 IF(TREE(2,PARENT).EQ.SON.AND.TREE(4,PARENT).LT.0.OR.TREE(3,PARENT 1).EQ.SON.AND.TREE(4,PARENT).GT.0) GOTO 170 SON=PARENT PNODES=PNODES-1 IF(PNODES.LT.0) GOTO 230 IF(PNODES.LE.0) GOTO 200 PARENT=SNODES(PNODES) GOTO 160 170 TREE(1,PARENT)=NEWBUC NEWBUC=NEWBUC+1 IF(NEWBUC.GT.NEWMAX) GOTO 270 IF(PNODES.LE.0) GOTO 200 PARENT=SNODES(PNODES) IF(TREE(4,PARENT).LE.0) GOTO 180 SON=TREE(2,PARENT) GOTO 190 180 SON=TREE(3,PARENT) 190 IF(SON.LE.0) GOTO 80 PARENT=SON PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 210 SNODES(PNODES)=PARENT GOTO 80 200 RETURN 210 WRITE(6,220) 220 FORMAT(' STACKSIZE TOO SMALL') STOP 230 WRITE(6,240) 240 FORMAT(' STACK NODES UNDERFLOW') STOP 250 WRITE(6,260) 260 FORMAT(' IMPOSSIBLE') STOP 270 WRITE(6,280) NEWBUC,NEWMAX 280 FORMAT(' NEWBUC =',I10,' EXCEEDES',I10) STOP 290 WRITE(6,300) OLDSTR,TREE(SON,PARENT) 300 FORMAT(' LOOKING FOR BUCKET',I10,' BUT FOUND',I10) STOP END