#!/usr/bin/perl -w

print "
/* Auto-generated file... Do not edit ! */

#include \"config.h\"
#include \"wine_gl.h\"


";

#
# Now, the functions from the include file
#
open(INC, "/usr/X11R6/include/GL/gl.h") || die "Could not open GL/gl.h";
while ($line = <INC>) {
    if ($line =~ /GLAPI.*GLAPIENTRY/) {
	# Start of a function declaration
	($ret, $name, $args) = ($line =~ /GLAPI (.*) GLAPIENTRY *(.*)\((.*)/);
	
	# Remove all extensions except the multitexture one (see OpenGL ABI)
	if (($name !~ /(MESA|PGI|ARB|EXT)/) ||
	    ($name =~ /MultiTexCoord/) ||
	    ($name =~ /ActiveTextureARB/)) {
	    print "/***********************************************************************\n";
	    print " *\t\t$name\n";
	    print " */\n";
	    print "$ret WINAPI wine_$name(";
	    @rargs = ();
	    @names = ();

	    # Now, get the parameters
	    while (1) {
		@args = split /,|\)/, $args;

		foreach (@args) {
		    if ($_ =~ /[a-z,A-Z]/) {
			($a) = ($_ =~ /^\s*(.*)\s*$/);
			if ($a =~ /\*\*/) {
			    ($var) = ($a =~ /\*\*(\w*)/);
			} elsif ($a =~ /\*/) {
			    ($var) = ($a =~ /\*(\w*)/);
			} else {
			    ($var) = ($a =~ /\s(\w*)/);
			}
			@rargs = (@rargs, $a);
			if ($var !~ /void/) {
			    @names = (@names, $var);
			}
		    }
		}

		if ($args !~ /\)/) {
		    $args = <INC>;
		} else {
		    last;
		}
	    }

	    print shift @rargs;
	    foreach (@rargs) {
		print ", $_";
	    }
	    print ") {\n";
	    if ($ret !~ /void/) {
		print "  $ret ret;\n";
	    }
	    print "  ENTER_GL();\n";
	    if ($ret !~ /void/) {
		print "  ret = ";
	    } else {
		print "  ";
	    }
	    print "$name(";

	    $farg = shift @names;
	    if ($farg) {
		print "$farg";

		foreach (@names) {
		    print ", $_";
		}
	    }
	    print ");\n";
	    print "  LEAVE_GL();\n";
	    if ($ret !~ /void/) {
		print "  return ret;\n";
	    }
	    print "}\n\n";
	}
    }
}

close(INC);
