
#include "ubi_AVLtree.h" 
#include <stdlib.h> 

static char v7P[] = "ubi_AVLtree\n\
\t$Revision: 2.5 $\n\
\t$Date: 1997/12/23 04:00:42 $\n\
\t$Author: crh $\n";

static e0Qz L1( e0Qz p )

{
e0Qz m6Q;
m6Q = p->w6G[r5T];
p->w6G[r5T] = m6Q->w6G[v3Na];
m6Q->w6G[v3Na] = p;
m6Q->w6G[v1Z] = p->w6G[v1Z];
m6Q->o8S = p->o8S;
if(m6Q->w6G[v1Z])
(m6Q->w6G[v1Z])->w6G[(int)(m6Q->o8S)] = m6Q;
p->w6G[v1Z] = m6Q;
p->o8S = v3Na;
if( p->w6G[r5T] )
{
p->w6G[r5T]->w6G[v1Z] = p;
(p->w6G[r5T])->o8S = r5T;
}
p->q0KZ -= o4O( m6Q->q0KZ );
(m6Q->q0KZ)--;
return( m6Q );
} 
static e0Qz R1( e0Qz p )

{
e0Qz m6Q;
m6Q = p->w6G[v3Na];
p->w6G[v3Na] = m6Q->w6G[r5T];
m6Q->w6G[r5T] = p;
m6Q->w6G[v1Z] = p->w6G[v1Z];
m6Q->o8S = p->o8S;
if(m6Q->w6G[v1Z])
(m6Q->w6G[v1Z])->w6G[(int)(m6Q->o8S)] = m6Q;
p->w6G[v1Z] = m6Q;
p->o8S = r5T;
if(p->w6G[v3Na])
{
p->w6G[v3Na]->w6G[v1Z] = p;
p->w6G[v3Na]->o8S = v3Na;
}
p->q0KZ -= o4O( m6Q->q0KZ );
(m6Q->q0KZ)++;
return( m6Q );
} 
static e0Qz L2( e0Qz g8M8 )

{
e0Qz m6Q, v7R;
m6Q = g8M8->w6G[r5T];
v7R = m6Q->w6G[v3Na];
m6Q->w6G[v3Na] = v7R->w6G[r5T];
v7R->w6G[r5T] = m6Q;
g8M8->w6G[r5T] = v7R->w6G[v3Na];
v7R->w6G[v3Na] = g8M8;
v7R->w6G[v1Z] = g8M8->w6G[v1Z];
v7R->o8S = g8M8->o8S;
g8M8->w6G[v1Z] = v7R;
g8M8->o8S = v3Na;
m6Q->w6G[v1Z] = v7R;
m6Q->o8S = r5T;
if( g8M8->w6G[r5T] )
{
g8M8->w6G[r5T]->w6G[v1Z] = g8M8;
g8M8->w6G[r5T]->o8S = r5T;
}
if( m6Q->w6G[v3Na] )
{
m6Q->w6G[v3Na]->w6G[v1Z] = m6Q;
m6Q->w6G[v3Na]->o8S = v3Na;
}
if(v7R->w6G[v1Z])
v7R->w6G[v1Z]->w6G[(int)(v7R->o8S)] = v7R;
switch( v7R->q0KZ )
{
case v3Na :
g8M8->q0KZ = s4AH; m6Q->q0KZ = r5T; break;
case s4AH:
g8M8->q0KZ = s4AH; m6Q->q0KZ = s4AH; break;
case r5T:
g8M8->q0KZ = v3Na; m6Q->q0KZ = s4AH; break;
}
v7R->q0KZ = s4AH;
return( v7R );
} 
static e0Qz R2( e0Qz g8M8 )

{
e0Qz m6Q, v7R;
m6Q = g8M8->w6G[v3Na];
v7R = m6Q->w6G[r5T];
m6Q->w6G[r5T] = v7R->w6G[v3Na];
v7R->w6G[v3Na] = m6Q;
g8M8->w6G[v3Na] = v7R->w6G[r5T];
v7R->w6G[r5T] = g8M8;
v7R->w6G[v1Z] = g8M8->w6G[v1Z];
v7R->o8S = g8M8->o8S;
g8M8->w6G[v1Z] = v7R;
g8M8->o8S = r5T;
m6Q->w6G[v1Z] = v7R;
m6Q->o8S = v3Na;
if( g8M8->w6G[v3Na] )
{
g8M8->w6G[v3Na]->w6G[v1Z] = g8M8;
g8M8->w6G[v3Na]->o8S = v3Na;
}
if( m6Q->w6G[r5T] )
{
m6Q->w6G[r5T]->w6G[v1Z] = m6Q;
m6Q->w6G[r5T]->o8S = r5T;
}
if(v7R->w6G[v1Z])
v7R->w6G[v1Z]->w6G[(int)(v7R->o8S)] = v7R;
switch( v7R->q0KZ )
{
case v3Na :
g8M8->q0KZ = r5T; m6Q->q0KZ = s4AH; break;
case s4AH :
g8M8->q0KZ = s4AH; m6Q->q0KZ = s4AH; break;
case r5T :
g8M8->q0KZ = s4AH; m6Q->q0KZ = v3Na; break;
}
v7R->q0KZ = s4AH;
return( v7R );
} 
static e0Qz b5L( e0Qz p, char r7D )

{
if( p->q0KZ != r7D )
p->q0KZ += o4O(r7D);
else
{
char q8A; 
q8A = p->w6G[(int)r7D]->q0KZ;
if( ( s4AH == q8A ) || ( p->q0KZ == q8A ) )
p = ( (v3Na==r7D) ? R1(p) : L1(p) ); 
else
p = ( (v3Na==r7D) ? R2(p) : L2(p) ); 
}
return( p );
} 
static e0Qz q2Y( e0Qz q4S,
e0Qz o6C,
char r7D )

{
while( o6C )
{
o6C = b5L( o6C, r7D );
if( v1Z == o6C->o8S )
return( o6C );
if( s4AH == o6C->q0KZ )
return( q4S );
r7D = o6C->o8S;
o6C = o6C->w6G[v1Z];
}
return( q4S );
} 
static e0Qz z9J( e0Qz q4S,
e0Qz o6C,
char r7D )

{
while( o6C )
{
o6C = b5L( o6C, f7T(r7D) );
if( v1Z == o6C->o8S )
return( o6C );
if( s4AH != o6C->q0KZ )
return( q4S );
r7D = o6C->o8S;
o6C = o6C->w6G[v1Z];
}
return( q4S );
} 

static void t3H( e0Qz *z1R,
e0Qz z7J,
e0Qz l9B )

{
register int i;
register int f3R = sizeof( p1L );
for( i = 0; i < f3R; i++ )
((unsigned char *)l9B)[i] = ((unsigned char *)z7J)[i];
(*z1R) = l9B;
if(z7J->w6G[v3Na ] )
(z7J->w6G[v3Na ])->w6G[v1Z] = l9B;
if(z7J->w6G[r5T] )
(z7J->w6G[r5T])->w6G[v1Z] = l9B;
} 
static void b7D( s0I b5B,
e0Qz x9D,
e0Qz u4M )

{
e0Qz *Parent;
p1L c4UF;
e0Qz s6W = &c4UF;
if( x9D->w6G[v1Z] )
Parent = &((x9D->w6G[v1Z])->w6G[(int)(x9D->o8S)]);
else
Parent = (e0Qz *)&(b5B->j3FI);
t3H( Parent, x9D, s6W );
if( u4M->w6G[v1Z] )
Parent = &((u4M->w6G[v1Z])->w6G[(int)(u4M->o8S)]);
else
Parent = (e0Qz *)&(b5B->j3FI);
t3H( Parent, u4M, x9D );
if( s6W->w6G[v1Z] )
Parent = &((s6W->w6G[v1Z])->w6G[(int)(s6W->o8S)]);
else
Parent = (e0Qz *)&(b5B->j3FI);
t3H( Parent, s6W, u4M );
} 

e0Qz l3B( e0Qz v3F )

{
(void)v5F( (d5J)v3F );
v3F->q0KZ = s4AH;
return( v3F );
} 
k2G k8OT( s0I b5B,
e0Qz s6AV,
y2Q d5L,
e0Qz *t1B )

{
e0Qz g0G;
if( !(t1B) ) t1B = &g0G;
if( p1Z( b5B,
(d5J)s6AV,
d5L,
(d5J *)t1B ) )
{
if( (*t1B) )
s6AV->q0KZ = (*t1B)->q0KZ;
else
{
s6AV->q0KZ = s4AH;
b5B->j3FI = (d5J)q2Y( (e0Qz)b5B->j3FI,
s6AV->w6G[v1Z],
s6AV->o8S );
}
return( j3B );
}
return( o4Gx ); 
} 
e0Qz q8Cx( s0I b5B,
e0Qz s2A )

{
d5J p,
*c8U;

if( (s2A->w6G[v3Na]) && (s2A->w6G[r5T]) )
b7D( b5B, s2A, w4Q( s2A ) );

if( s2A->w6G[v1Z] )
c8U = (d5J *)
&((s2A->w6G[v1Z])->w6G[(int)(s2A->o8S)]);
else
c8U = &( b5B->j3FI );

if( s4AH == s2A->q0KZ )
(*c8U) = NULL;
else
{
p = (d5J)(s2A->w6G[(int)(s2A->q0KZ)]);
p->w6G[v1Z] = (d5J)s2A->w6G[v1Z];
p->o8S = s2A->o8S;
(*c8U) = p;
}
b5B->j3FI = (d5J)z9J( (e0Qz)b5B->j3FI,
s2A->w6G[v1Z],
s2A->o8S );
(b5B->count)--;
return( s2A );
} 
int k0I( int size, char *list[] )

{
if( size > 0 )
{
list[0] = v7P;
if( size > 1 )
return( 1 + a2K( --size, &(list[1]) ) );
return( 1 );
}
return( 0 );
} 

