#!/usr/local/bin/perl
#
# generate the XSUBS for the all gl functions
#

$gl  = "/usr/include/GL/gl.h";
$glu = "/usr/include/GL/glu.h";


sub getfuncs {
	local($file)=@_;
	open(FILE,$file) || die "cant open $file\n";
	while(<FILE>) {
		# if(/extern\s+(\w+)\s+(\w+)\s*\((.*\*.*)\)\s*\;/ ){
		if(/extern\s+(\w+)\s+(\w+)\s*\((.*)\)\s*\;/ ){
			#print "$1 $2($3)\n" 
			$rt=$1;$name=$2;$args=$3;
			$exists_pointer = ($args =~ /\*/); 
			@args = split(/\,/,$args);
			@args=() if (($args =~ /^\s*void\s*$/) || ($args =~ /^\s*$/));
			print "$rt\n"; 
			print "$name(";
			$i=0;
			foreach $a (@args) {
				print "," if($i);
				$a =~ s/const\s+(.*\S)\s*\*\s*(.*)/$1_star $2/;
				$a =~ s/(.*\S)\s*\*\s*(.*)/$1_star $2/;
				$a =~ /(\w+)\s+(\w+)/;
				print($2);
				$i++;
			}
			print ")\n";
			foreach $a (@args) {
				$a =~ /(\w+)\s+(\w+)/;
				$t=$1;$n=$2;
				$t =~ s/\w+_star/char \*/;
				print "\t$t\t$n\n";
			}
			if($exists_pointer) {
				print "\tCODE:\n";
				print "\t{\n";
				print "\t   $name(";
				$i=0;
				foreach $a (@args) {
					print "," if($i);
					$a =~ /(\w+)\s+(\w+)/;
					$t=$1;$n=$2;
					if($t =~ /(\w+)_star/) {
						print "($1 *)";
					}
					print $n;
					$i++;
				}
				print ");\n"; 
				print "\t}\n";
			}
			print "\n";
		}
	}
}

&getfuncs($gl);
