[GLU32] Sync with glu 9.0.1 (#2314)

This commit is contained in:
Masanori Ogino 2020-02-08 02:07:56 +09:00 committed by GitHub
parent 507cda98cf
commit 695946a5cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 85 additions and 83 deletions

View file

@ -381,13 +381,13 @@ ArcTessellator::tessellateNonlinear( Arc *arc, REAL geo_stepsize, REAL arc_steps
#ifndef NOELIMINATION #ifndef NOELIMINATION
int ocanremove = 0; int ocanremove = 0;
#endif #endif
register long order = bezierArc->order; long order = bezierArc->order;
for( step=1, ++vert; step<nsteps; step++, vert++ ) { for( step=1, ++vert; step<nsteps; step++, vert++ ) {
register REAL p = dp * step; REAL p = dp * step;
register REAL u = pow_u[0]; REAL u = pow_u[0];
register REAL v = pow_v[0]; REAL v = pow_v[0];
register REAL w = pow_w[0]; REAL w = pow_w[0];
for( register int i = 1; i < order; i++ ) { for( int i = 1; i < order; i++ ) {
u = u * p + pow_u[i]; u = u * p + pow_u[i];
v = v * p + pow_v[i]; v = v * p + pow_v[i];
w = w * p + pow_w[i]; w = w * p + pow_w[i];
@ -444,12 +444,12 @@ ArcTessellator::tessellateNonlinear( Arc *arc, REAL geo_stepsize, REAL arc_steps
#ifndef NOELIMINATION #ifndef NOELIMINATION
int ocanremove = 0; int ocanremove = 0;
#endif #endif
register long order = bezierArc->order; long order = bezierArc->order;
for( step=1, ++vert; step<nsteps; step++, vert++ ) { for( step=1, ++vert; step<nsteps; step++, vert++ ) {
register REAL p = dp * step; REAL p = dp * step;
register REAL u = pow_u[0]; REAL u = pow_u[0];
register REAL v = pow_v[0]; REAL v = pow_v[0];
for( register int i = 1; i < bezierArc->order; i++ ) { for( int i = 1; i < bezierArc->order; i++ ) {
u = u * p + pow_u[i]; u = u * p + pow_u[i];
v = v * p + pow_v[i]; v = v * p + pow_v[i];
} }
@ -591,9 +591,9 @@ const REAL ArcTessellator::gl_Bernstein[][MAXORDER][MAXORDER] = {
void void
ArcTessellator::trim_power_coeffs( BezierArc *bez_arc, REAL *p, int coord ) ArcTessellator::trim_power_coeffs( BezierArc *bez_arc, REAL *p, int coord )
{ {
register int stride = bez_arc->stride; int stride = bez_arc->stride;
register int order = bez_arc->order; int order = bez_arc->order;
register REAL *base = bez_arc->cpts + coord; REAL *base = bez_arc->cpts + coord;
REAL const (*mat)[MAXORDER][MAXORDER] = &gl_Bernstein[order-1]; REAL const (*mat)[MAXORDER][MAXORDER] = &gl_Bernstein[order-1];
REAL const (*lrow)[MAXORDER] = &(*mat)[order]; REAL const (*lrow)[MAXORDER] = &(*mat)[order];
@ -601,9 +601,9 @@ ArcTessellator::trim_power_coeffs( BezierArc *bez_arc, REAL *p, int coord )
/* WIN32 didn't like the following line within the for-loop */ /* WIN32 didn't like the following line within the for-loop */
REAL const (*row)[MAXORDER] = &(*mat)[0]; REAL const (*row)[MAXORDER] = &(*mat)[0];
for( ; row != lrow; row++ ) { for( ; row != lrow; row++ ) {
register REAL s = 0.0; REAL s = 0.0;
register REAL *point = base; REAL *point = base;
register REAL const *mlast = *row + order; REAL const *mlast = *row + order;
for( REAL const *m = *row; m != mlast; m++, point += stride ) for( REAL const *m = *row; m != mlast; m++, point += stride )
s += *(m) * (*point); s += *(m) * (*point);
*(p++) = s; *(p++) = s;

View file

@ -56,12 +56,12 @@ Subdivider::bbox( TrimVertex *a, TrimVertex *b, TrimVertex *c, int p )
int int
Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1
{ {
register TrimVertex *v1 = &j1->pwlArc->pts[j1->pwlArc->npts-1]; TrimVertex *v1 = &j1->pwlArc->pts[j1->pwlArc->npts-1];
register TrimVertex *v1last = &j1->pwlArc->pts[0]; TrimVertex *v1last = &j1->pwlArc->pts[0];
register TrimVertex *v2 = &j2->pwlArc->pts[0]; TrimVertex *v2 = &j2->pwlArc->pts[0];
register TrimVertex *v2last = &j2->pwlArc->pts[j2->pwlArc->npts-1]; TrimVertex *v2last = &j2->pwlArc->pts[j2->pwlArc->npts-1];
register TrimVertex *v1next = v1-1; TrimVertex *v1next = v1-1;
register TrimVertex *v2next = v2+1; TrimVertex *v2next = v2+1;
int sgn; int sgn;
assert( v1 != v1last ); assert( v1 != v1last );
@ -169,12 +169,12 @@ Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1
int int
Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0 Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0
{ {
register TrimVertex *v1 = &j1->pwlArc->pts[j1->pwlArc->npts-1]; TrimVertex *v1 = &j1->pwlArc->pts[j1->pwlArc->npts-1];
register TrimVertex *v1last = &j1->pwlArc->pts[0]; TrimVertex *v1last = &j1->pwlArc->pts[0];
register TrimVertex *v2 = &j2->pwlArc->pts[0]; TrimVertex *v2 = &j2->pwlArc->pts[0];
register TrimVertex *v2last = &j2->pwlArc->pts[j2->pwlArc->npts-1]; TrimVertex *v2last = &j2->pwlArc->pts[j2->pwlArc->npts-1];
register TrimVertex *v1next = v1-1; TrimVertex *v1next = v1-1;
register TrimVertex *v2next = v2+1; TrimVertex *v2next = v2+1;
int sgn; int sgn;
assert( v1 != v1last ); assert( v1 != v1last );
@ -282,12 +282,12 @@ Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0
int int
Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1
{ {
register TrimVertex *v1 = &j1->pwlArc->pts[j1->pwlArc->npts-1]; TrimVertex *v1 = &j1->pwlArc->pts[j1->pwlArc->npts-1];
register TrimVertex *v1last = &j1->pwlArc->pts[0]; TrimVertex *v1last = &j1->pwlArc->pts[0];
register TrimVertex *v2 = &j2->pwlArc->pts[0]; TrimVertex *v2 = &j2->pwlArc->pts[0];
register TrimVertex *v2last = &j2->pwlArc->pts[j2->pwlArc->npts-1]; TrimVertex *v2last = &j2->pwlArc->pts[j2->pwlArc->npts-1];
register TrimVertex *v1next = v1-1; TrimVertex *v1next = v1-1;
register TrimVertex *v2next = v2+1; TrimVertex *v2next = v2+1;
int sgn; int sgn;
assert( v1 != v1last ); assert( v1 != v1last );
@ -395,12 +395,12 @@ Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1
int int
Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 ) Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 )
{ {
register TrimVertex *v1 = &j1->pwlArc->pts[j1->pwlArc->npts-1]; TrimVertex *v1 = &j1->pwlArc->pts[j1->pwlArc->npts-1];
register TrimVertex *v1last = &j1->pwlArc->pts[0]; TrimVertex *v1last = &j1->pwlArc->pts[0];
register TrimVertex *v2 = &j2->pwlArc->pts[0]; TrimVertex *v2 = &j2->pwlArc->pts[0];
register TrimVertex *v2last = &j2->pwlArc->pts[j2->pwlArc->npts-1]; TrimVertex *v2last = &j2->pwlArc->pts[j2->pwlArc->npts-1];
register TrimVertex *v1next = v1-1; TrimVertex *v1next = v1-1;
register TrimVertex *v2next = v2+1; TrimVertex *v2next = v2+1;
int sgn; int sgn;
assert( v1 != v1last ); assert( v1 != v1last );
@ -508,12 +508,10 @@ Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 )
#ifndef NDEBUG #ifndef NDEBUG
int int
Subdivider::bbox( register REAL sa, register REAL sb, register REAL sc, Subdivider::bbox( REAL sa, REAL sb, REAL sc, REAL ta, REAL tb, REAL tc )
register REAL ta, register REAL tb, register REAL tc )
#else #else
int int
Subdivider::bbox( register REAL sa, register REAL sb, register REAL sc, Subdivider::bbox( REAL sa, REAL sb, REAL sc, REAL , REAL , REAL )
register REAL , register REAL , register REAL )
#endif #endif
{ {
#ifndef NDEBUG #ifndef NDEBUG

View file

@ -139,7 +139,7 @@ Hull::nextupper( GridTrimVertex *gv )
} }
GridTrimVertex * GridTrimVertex *
Hull::nextlower( register GridTrimVertex *gv ) Hull::nextlower( GridTrimVertex *gv )
{ {
if( lower.left ) { if( lower.left ) {
gv->set( lower.left->next() ); gv->set( lower.left->next() );

View file

@ -156,7 +156,7 @@ Mapdesc::copyPt( REAL *d, REAL *s )
*-------------------------------------------------------------------------- *--------------------------------------------------------------------------
*/ */
void void
Mapdesc::sumPt( REAL *dst, REAL *src1, REAL *src2, register REAL alpha, register REAL beta ) Mapdesc::sumPt( REAL *dst, REAL *src1, REAL *src2, REAL alpha, REAL beta )
{ {
assert( hcoords > 0 ); assert( hcoords > 0 );
switch( hcoords ) { switch( hcoords ) {
@ -204,10 +204,10 @@ Mapdesc::clipbits( REAL *p )
assert( inhcoords >= 0 ); assert( inhcoords >= 0 );
assert( inhcoords <= 3 ); assert( inhcoords <= 3 );
register int nc = inhcoords; int nc = inhcoords;
register REAL pw = p[nc]; REAL pw = p[nc];
register REAL nw = -pw; REAL nw = -pw;
register unsigned int bits = 0; unsigned int bits = 0;
if( pw == 0.0 ) return mask; if( pw == 0.0 ) return mask;

View file

@ -276,13 +276,13 @@ Mesher::output( int x )
void void
Mesher::addLast( ) Mesher::addLast( )
{ {
register int ilast = itop; int ilast = itop;
if( lastedge == 0 ) { if( lastedge == 0 ) {
if( equal( 0, 1 ) ) { if( equal( 0, 1 ) ) {
output( ilast ); output( ilast );
swapMesh(); swapMesh();
for( register int i = 2; i < ilast; i++ ) { for( int i = 2; i < ilast; i++ ) {
swapMesh(); swapMesh();
output( i ); output( i );
} }
@ -290,7 +290,7 @@ Mesher::addLast( )
} else if( equal( ilast-2, ilast-1) ) { } else if( equal( ilast-2, ilast-1) ) {
swapMesh(); swapMesh();
output( ilast ); output( ilast );
for( register int i = ilast-3; i >= 0; i-- ) { for( int i = ilast-3; i >= 0; i-- ) {
output( i ); output( i );
swapMesh(); swapMesh();
} }
@ -299,7 +299,7 @@ Mesher::addLast( )
closeMesh(); openMesh(); closeMesh(); openMesh();
output( ilast ); output( ilast );
output( 0 ); output( 0 );
for( register int i = 1; i < ilast; i++ ) { for( int i = 1; i < ilast; i++ ) {
swapMesh(); swapMesh();
output( i ); output( i );
} }
@ -309,7 +309,7 @@ Mesher::addLast( )
if( equal( 1, 0) ) { if( equal( 1, 0) ) {
swapMesh(); swapMesh();
output( ilast ); output( ilast );
for( register int i = 2; i < ilast; i++ ) { for( int i = 2; i < ilast; i++ ) {
output( i ); output( i );
swapMesh(); swapMesh();
} }
@ -317,7 +317,7 @@ Mesher::addLast( )
} else if( equal( ilast-1, ilast-2) ) { } else if( equal( ilast-1, ilast-2) ) {
output( ilast ); output( ilast );
swapMesh(); swapMesh();
for( register int i = ilast-3; i >= 0; i-- ) { for( int i = ilast-3; i >= 0; i-- ) {
swapMesh(); swapMesh();
output( i ); output( i );
} }
@ -326,7 +326,7 @@ Mesher::addLast( )
closeMesh(); openMesh(); closeMesh(); openMesh();
output( 0 ); output( 0 );
output( ilast ); output( ilast );
for( register int i = 1; i < ilast; i++ ) { for( int i = 1; i < ilast; i++ ) {
output( i ); output( i );
swapMesh(); swapMesh();
} }
@ -334,19 +334,19 @@ Mesher::addLast( )
} }
} }
closeMesh(); closeMesh();
//for( register long k=0; k<=ilast; k++ ) pop( k ); //for( long k=0; k<=ilast; k++ ) pop( k );
} }
void void
Mesher::addUpper( ) Mesher::addUpper( )
{ {
register int ilast = itop; int ilast = itop;
if( lastedge == 0 ) { if( lastedge == 0 ) {
if( equal( 0, 1 ) ) { if( equal( 0, 1 ) ) {
output( ilast ); output( ilast );
swapMesh(); swapMesh();
for( register int i = 2; i < ilast; i++ ) { for( int i = 2; i < ilast; i++ ) {
swapMesh(); swapMesh();
output( i ); output( i );
} }
@ -354,7 +354,7 @@ Mesher::addUpper( )
} else if( equal( ilast-2, ilast-1) ) { } else if( equal( ilast-2, ilast-1) ) {
swapMesh(); swapMesh();
output( ilast ); output( ilast );
for( register int i = ilast-3; i >= 0; i-- ) { for( int i = ilast-3; i >= 0; i-- ) {
output( i ); output( i );
swapMesh(); swapMesh();
} }
@ -363,14 +363,14 @@ Mesher::addUpper( )
closeMesh(); openMesh(); closeMesh(); openMesh();
output( ilast ); output( ilast );
output( 0 ); output( 0 );
for( register int i = 1; i < ilast; i++ ) { for( int i = 1; i < ilast; i++ ) {
swapMesh(); swapMesh();
output( i ); output( i );
} }
copy( ilast, ilast-1 ); copy( ilast, ilast-1 );
} }
lastedge = 1; lastedge = 1;
//for( register long k=0; k<ilast-1; k++ ) pop( k ); //for( long k=0; k<ilast-1; k++ ) pop( k );
move( 0, ilast-1 ); move( 0, ilast-1 );
move( 1, ilast ); move( 1, ilast );
itop = 1; itop = 1;
@ -383,7 +383,7 @@ Mesher::addUpper( )
if( equal( ilast-1, ilast-2 ) ) { if( equal( ilast-1, ilast-2 ) ) {
output( ilast ); output( ilast );
swapMesh(); swapMesh();
for( register int i=ilast-3; i>=itop-1; i-- ) { for( int i=ilast-3; i>=itop-1; i-- ) {
swapMesh(); swapMesh();
output( i ); output( i );
} }
@ -391,7 +391,7 @@ Mesher::addUpper( )
} else if( equal( itop, itop-1 ) ) { } else if( equal( itop, itop-1 ) ) {
swapMesh(); swapMesh();
output( ilast ); output( ilast );
for( register int i = itop+1; i < ilast; i++ ) { for( int i = itop+1; i < ilast; i++ ) {
output( i ); output( i );
swapMesh(); swapMesh();
} }
@ -400,13 +400,13 @@ Mesher::addUpper( )
closeMesh(); openMesh(); closeMesh(); openMesh();
output( ilast ); output( ilast );
output( ilast-1 ); output( ilast-1 );
for( register int i=ilast-2; i>=itop-1; i-- ) { for( int i=ilast-2; i>=itop-1; i-- ) {
swapMesh(); swapMesh();
output( i ); output( i );
} }
copy( ilast, itop-1 ); copy( ilast, itop-1 );
} }
//for( register int k=itop; k<ilast; k++ ) pop( k ); //for( int k=itop; k<ilast; k++ ) pop( k );
move( itop, ilast ); move( itop, ilast );
} }
} }
@ -414,13 +414,13 @@ Mesher::addUpper( )
void void
Mesher::addLower() Mesher::addLower()
{ {
register int ilast = itop; int ilast = itop;
if( lastedge == 1 ) { if( lastedge == 1 ) {
if( equal( 1, 0) ) { if( equal( 1, 0) ) {
swapMesh(); swapMesh();
output( ilast ); output( ilast );
for( register int i = 2; i < ilast; i++ ) { for( int i = 2; i < ilast; i++ ) {
output( i ); output( i );
swapMesh(); swapMesh();
} }
@ -428,7 +428,7 @@ Mesher::addLower()
} else if( equal( ilast-1, ilast-2) ) { } else if( equal( ilast-1, ilast-2) ) {
output( ilast ); output( ilast );
swapMesh(); swapMesh();
for( register int i = ilast-3; i >= 0; i-- ) { for( int i = ilast-3; i >= 0; i-- ) {
swapMesh(); swapMesh();
output( i ); output( i );
} }
@ -437,7 +437,7 @@ Mesher::addLower()
closeMesh(); openMesh(); closeMesh(); openMesh();
output( 0 ); output( 0 );
output( ilast ); output( ilast );
for( register int i = 1; i < ilast; i++ ) { for( int i = 1; i < ilast; i++ ) {
output( i ); output( i );
swapMesh(); swapMesh();
} }
@ -445,7 +445,7 @@ Mesher::addLower()
} }
lastedge = 0; lastedge = 0;
//for( register long k=0; k<ilast-1; k++ ) pop( k ); //for( long k=0; k<ilast-1; k++ ) pop( k );
move( 0, ilast-1 ); move( 0, ilast-1 );
move( 1, ilast ); move( 1, ilast );
itop = 1; itop = 1;
@ -458,7 +458,7 @@ Mesher::addLower()
if( equal( ilast-2, ilast-1) ) { if( equal( ilast-2, ilast-1) ) {
swapMesh(); swapMesh();
output( ilast ); output( ilast );
for( register int i=ilast-3; i>=itop-1; i--) { for( int i=ilast-3; i>=itop-1; i--) {
output( i ); output( i );
swapMesh( ); swapMesh( );
} }
@ -466,7 +466,7 @@ Mesher::addLower()
} else if( equal( itop-1, itop) ) { } else if( equal( itop-1, itop) ) {
output( ilast ); output( ilast );
swapMesh(); swapMesh();
for( register int i=itop+1; i<ilast; i++ ) { for( int i=itop+1; i<ilast; i++ ) {
swapMesh( ); swapMesh( );
output( i ); output( i );
} }
@ -475,13 +475,13 @@ Mesher::addLower()
closeMesh(); openMesh(); closeMesh(); openMesh();
output( ilast-1 ); output( ilast-1 );
output( ilast ); output( ilast );
for( register int i=ilast-2; i>=itop-1; i-- ) { for( int i=ilast-2; i>=itop-1; i-- ) {
output( i ); output( i );
swapMesh( ); swapMesh( );
} }
copy( itop-1, ilast ); copy( itop-1, ilast );
} }
//for( register int k=itop; k<ilast; k++ ) pop( k ); //for( int k=itop; k<ilast; k++ ) pop( k );
move( itop, ilast ); move( itop, ilast );
} }
} }

View file

@ -117,7 +117,7 @@ Trimline::getNextPts( REAL vval, Backend& backend )
reset(); swap(); append( tinterp ); reset(); swap(); append( tinterp );
assert( tinterp->param[1] >= vval ); assert( tinterp->param[1] >= vval );
register TrimVertex *p; TrimVertex *p;
for( p=jarcl.getnextpt() ; p->param[1] >= vval; p=jarcl.getnextpt() ) { for( p=jarcl.getnextpt() ; p->param[1] >= vval; p=jarcl.getnextpt() ) {
append( p ); append( p );
} }
@ -139,7 +139,7 @@ Trimline::getPrevPts( REAL vval, Backend& backend )
reset(); swap(); append( tinterp ); reset(); swap(); append( tinterp );
assert( tinterp->param[1] >= vval ); assert( tinterp->param[1] >= vval );
register TrimVertex *q; TrimVertex *q;
for( q=jarcl.getprevpt(); q->param[1] >= vval; q=jarcl.getprevpt() ) { for( q=jarcl.getprevpt(); q->param[1] >= vval; q=jarcl.getprevpt() ) {
append( q ); append( q );
} }
@ -165,7 +165,7 @@ Trimline::getNextPts( Arc_ptr botarc )
TrimVertex *lastpt1 = &lastpwl->pts[lastpwl->npts-1]; TrimVertex *lastpt1 = &lastpwl->pts[lastpwl->npts-1];
#endif #endif
TrimVertex *lastpt2 = botarc->pwlArc->pts; TrimVertex *lastpt2 = botarc->pwlArc->pts;
register TrimVertex *p = jarcl.getnextpt(); TrimVertex *p = jarcl.getnextpt();
for( append( p ); p != lastpt2; append( p ) ) { for( append( p ); p != lastpt2; append( p ) ) {
assert( p != lastpt1 ); assert( p != lastpt1 );
p = jarcl.getnextpt(); p = jarcl.getnextpt();
@ -183,7 +183,7 @@ Trimline::getPrevPts( Arc_ptr botarc )
TrimVertex *lastpt2 = botarc->pwlArc->pts; TrimVertex *lastpt2 = botarc->pwlArc->pts;
#endif #endif
register TrimVertex *q = jarcl.getprevpt(); TrimVertex *q = jarcl.getprevpt();
for( append( q ); q != lastpt1; append( q ) ) { for( append( q ); q != lastpt1; append( q ) ) {
assert( q != lastpt2 ); assert( q != lastpt2 );
q = jarcl.getprevpt(); q = jarcl.getprevpt();

View file

@ -65,6 +65,7 @@ PriorityQ *pqNewPriorityQ( int (*leq)(PQkey key1, PQkey key2) )
return NULL; return NULL;
} }
pq->order = NULL;
pq->size = 0; pq->size = 0;
pq->max = INIT_SIZE; pq->max = INIT_SIZE;
pq->initialized = FALSE; pq->initialized = FALSE;

View file

@ -30,6 +30,7 @@
#include "gluos.h" #include "gluos.h"
#include "gluint.h" #include "gluint.h"
#include <stddef.h>
#include <GL/glu.h> #include <GL/glu.h>

View file

@ -4509,6 +4509,8 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels); glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length); glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes); glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
free(srcImage);
free(dstImage);
return GLU_OUT_OF_MEMORY; return GLU_OUT_OF_MEMORY;
} }

View file

@ -31,8 +31,8 @@ Used Version: 8.0.4
Website: http://www.mesa3d.org Website: http://www.mesa3d.org
Title: Mesa3D glu libary Title: Mesa3D glu libary
Used Version: 9.0 Used Version: 9.0.1
Website: ftp://ftp.freedesktop.org/pub/mesa/glu/ Website: https://gitlab.freedesktop.org/mesa/glu | ftp://ftp.freedesktop.org/pub/mesa/glu/
Title: GNU adns Title: GNU adns
Used Version: 1.0 REV 5 Used Version: 1.0 REV 5