]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1996/04/01 15:03:25 mclareni | |
6 | * Mathlib gen | |
7 | * | |
8 | * | |
9 | #include "gen/pilot.h" | |
10 | SUBROUTINE TREAUD (PARENT,OLDSTR,NEWBUC,NEWMAX,TREE) | |
11 | INTEGER PARENT,OLDSTR,NEWBUC,NEWMAX,TREE(4,1000),SON | |
12 | INTEGER SNODES(100) | |
13 | INTEGER PNODES,MNODES | |
14 | IF(100.GT.100) GOTO 250 | |
15 | PNODES=0 | |
16 | MNODES=100 | |
17 | PNODES=PNODES+1 | |
18 | IF(PNODES.GT.MNODES) GOTO 210 | |
19 | SNODES(PNODES)=PARENT | |
20 | 10 IF(OLDSTR.GT.TREE(1,PARENT)) GOTO 40 | |
21 | IF(PNODES.LE.0) GOTO 200 | |
22 | PARENT=SNODES(PNODES) | |
23 | IF(TREE(4,PARENT).GE.0) GOTO 20 | |
24 | SON=TREE(2,PARENT) | |
25 | GOTO 30 | |
26 | 20 SON=TREE(3,PARENT) | |
27 | 30 IF(SON.LE.0) GOTO 70 | |
28 | PARENT=SON | |
29 | PNODES=PNODES+1 | |
30 | IF(PNODES.GT.MNODES) GOTO 210 | |
31 | SNODES(PNODES)=PARENT | |
32 | GOTO 70 | |
33 | 40 IF(PNODES.LE.0) GOTO 200 | |
34 | PARENT=SNODES(PNODES) | |
35 | IF(TREE(4,PARENT).LE.0) GOTO 50 | |
36 | SON=TREE(2,PARENT) | |
37 | GOTO 60 | |
38 | 50 SON=TREE(3,PARENT) | |
39 | 60 IF(SON.LE.0) GOTO 70 | |
40 | PARENT=SON | |
41 | PNODES=PNODES+1 | |
42 | IF(PNODES.GT.MNODES) GOTO 210 | |
43 | SNODES(PNODES)=PARENT | |
44 | 70 IF(SON.GE.0) GOTO 10 | |
45 | IF(OLDSTR.NE.-SON) GOTO 290 | |
46 | GOTO 80 | |
47 | 80 IF(SON.LT.0) GOTO 110 | |
48 | IF(PNODES.LE.0) GOTO 200 | |
49 | PARENT=SNODES(PNODES) | |
50 | IF(TREE(4,PARENT).GE.0) GOTO 90 | |
51 | SON=TREE(2,PARENT) | |
52 | GOTO 100 | |
53 | 90 SON=TREE(3,PARENT) | |
54 | 100 IF(SON.LE.0) GOTO 80 | |
55 | PARENT=SON | |
56 | PNODES=PNODES+1 | |
57 | IF(PNODES.GT.MNODES) GOTO 210 | |
58 | SNODES(PNODES)=PARENT | |
59 | GOTO 80 | |
60 | 110 IF(TREE(4,PARENT).GE.0) GOTO 130 | |
61 | IF(SON.NE.TREE(3,PARENT)) GOTO 120 | |
62 | TREE(3,PARENT)=-NEWBUC | |
63 | GOTO 150 | |
64 | 120 TREE(2,PARENT)=-NEWBUC | |
65 | GOTO 150 | |
66 | 130 IF(SON.NE.TREE(2,PARENT)) GOTO 140 | |
67 | TREE(2,PARENT)=-NEWBUC | |
68 | GOTO 150 | |
69 | 140 TREE(3,PARENT)=-NEWBUC | |
70 | 150 SON=-NEWBUC | |
71 | 160 IF(TREE(2,PARENT).EQ.SON.AND.TREE(4,PARENT).LT.0.OR.TREE(3,PARENT | |
72 | 1).EQ.SON.AND.TREE(4,PARENT).GT.0) GOTO 170 | |
73 | SON=PARENT | |
74 | PNODES=PNODES-1 | |
75 | IF(PNODES.LT.0) GOTO 230 | |
76 | IF(PNODES.LE.0) GOTO 200 | |
77 | PARENT=SNODES(PNODES) | |
78 | GOTO 160 | |
79 | 170 TREE(1,PARENT)=NEWBUC | |
80 | NEWBUC=NEWBUC+1 | |
81 | IF(NEWBUC.GT.NEWMAX) GOTO 270 | |
82 | IF(PNODES.LE.0) GOTO 200 | |
83 | PARENT=SNODES(PNODES) | |
84 | IF(TREE(4,PARENT).LE.0) GOTO 180 | |
85 | SON=TREE(2,PARENT) | |
86 | GOTO 190 | |
87 | 180 SON=TREE(3,PARENT) | |
88 | 190 IF(SON.LE.0) GOTO 80 | |
89 | PARENT=SON | |
90 | PNODES=PNODES+1 | |
91 | IF(PNODES.GT.MNODES) GOTO 210 | |
92 | SNODES(PNODES)=PARENT | |
93 | GOTO 80 | |
94 | 200 RETURN | |
95 | 210 WRITE(6,220) | |
96 | 220 FORMAT(' STACKSIZE TOO SMALL') | |
97 | STOP | |
98 | 230 WRITE(6,240) | |
99 | 240 FORMAT(' STACK NODES UNDERFLOW') | |
100 | STOP | |
101 | 250 WRITE(6,260) | |
102 | 260 FORMAT(' IMPOSSIBLE') | |
103 | STOP | |
104 | 270 WRITE(6,280) NEWBUC,NEWMAX | |
105 | 280 FORMAT(' NEWBUC =',I10,' EXCEEDES',I10) | |
106 | STOP | |
107 | 290 WRITE(6,300) OLDSTR,TREE(SON,PARENT) | |
108 | 300 FORMAT(' LOOKING FOR BUCKET',I10,' BUT FOUND',I10) | |
109 | STOP | |
110 | END |