mirror of
https://github.com/nigels-com/glew.git
synced 2024-11-14 10:13:49 +00:00
b6ef9dd3ad
git-svn-id: https://glew.svn.sourceforge.net/svnroot/glew/trunk/glew@508 783a27ee-832a-0410-bc00-9f386506c6dd
171 lines
3.5 KiB
Perl
Executable File
171 lines
3.5 KiB
Perl
Executable File
##
|
|
## Copyright (C) 2003-2007, Marcelo E. Magallon <mmagallo[]debian org>
|
|
## Copyright (C) 2003-2007, Milan Ikits <milan ikits[]ieee org>
|
|
##
|
|
## This program is distributed under the terms and conditions of the GNU
|
|
## General Public License Version 2 as published by the Free Software
|
|
## Foundation or, at your option, any later version.
|
|
|
|
my %regex = (
|
|
extname => qr/^[A-Z][A-Za-z0-9_]+$/,
|
|
exturl => qr/^http.+$/,
|
|
function => qr/^(.+) ([a-z][a-z0-9_]*) \((.+)\)$/i,
|
|
token => qr/^([A-Z][A-Z0-9_x]*)\s+((?:0x)?[0-9A-F]+|[A-Z][A-Z0-9_]*)$/,
|
|
type => qr/^typedef\s+(.+)\s+([\*A-Za-z0-9_]+)$/,
|
|
exact => qr/.*;$/,
|
|
);
|
|
|
|
# prefix function name with glew
|
|
sub prefixname($)
|
|
{
|
|
my $name = $_[0];
|
|
$name =~ s/^(.*)gl/__$1glew/;
|
|
return $name;
|
|
}
|
|
|
|
# prefix function name with glew
|
|
sub prefix_varname($)
|
|
{
|
|
my $name = $_[0];
|
|
$name =~ s/^(.*)GL(X*)EW/__$1GL$2EW/;
|
|
return $name;
|
|
}
|
|
|
|
#---------------------------------------------------------------------------------------
|
|
|
|
sub make_exact($)
|
|
{
|
|
my $exact = $_[0];
|
|
$exact =~ s/(; |{)/$1\n/g;
|
|
return $exact;
|
|
}
|
|
|
|
sub make_separator($)
|
|
{
|
|
my $extname = $_[0];
|
|
my $l = length $extname;
|
|
my $s = (71 - $l)/2;
|
|
print "/* ";
|
|
my $j = 3;
|
|
for (my $i = 0; $i < $s; $i++)
|
|
{
|
|
print "-";
|
|
$j++;
|
|
}
|
|
print " $_[0] ";
|
|
$j += $l + 2;
|
|
while ($j < 76)
|
|
{
|
|
print "-";
|
|
$j++;
|
|
}
|
|
print " */\n\n";
|
|
}
|
|
|
|
#---------------------------------------------------------------------------------------
|
|
|
|
sub parse_ext($)
|
|
{
|
|
my $filename = shift;
|
|
my %functions = ();
|
|
my %tokens = ();
|
|
my %types = ();
|
|
my @exacts = ();
|
|
my $extname = "";
|
|
my $exturl = "";
|
|
|
|
open EXT, "<$filename" or return;
|
|
|
|
while(<EXT>)
|
|
{
|
|
chomp;
|
|
if (/$regex{extname}/)
|
|
{
|
|
$extname = $_;
|
|
next;
|
|
}
|
|
elsif (/$regex{exturl}/)
|
|
{
|
|
$exturl = $_;
|
|
}
|
|
elsif (s/^\s+//)
|
|
{
|
|
if (/$regex{exact}/)
|
|
{
|
|
push @exacts, $_;
|
|
}
|
|
elsif (/$regex{type}/)
|
|
{
|
|
my ($value, $name) = ($1, $2);
|
|
$types{$name} = $value;
|
|
}
|
|
elsif (/$regex{token}/)
|
|
{
|
|
my ($name, $value) = ($1, $2);
|
|
$tokens{$name} = $value;
|
|
}
|
|
elsif (/$regex{function}/)
|
|
{
|
|
my ($return, $name, $parms) = ($1, $2, $3);
|
|
$functions{$name} = {
|
|
rtype => $return,
|
|
parms => $parms,
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
close EXT;
|
|
|
|
return ($extname, $exturl, \%types, \%tokens, \%functions, \@exacts);
|
|
}
|
|
|
|
sub output_tokens($$)
|
|
{
|
|
my ($tbl, $fnc) = @_;
|
|
if (keys %{$tbl})
|
|
{
|
|
local $, = "\n";
|
|
print "\n";
|
|
print map { &{$fnc}($_, $tbl->{$_}) } sort { hex ${$tbl}{$a} <=> hex ${$tbl}{$b} } keys %{$tbl};
|
|
print "\n";
|
|
}
|
|
}
|
|
|
|
sub output_types($$)
|
|
{
|
|
my ($tbl, $fnc) = @_;
|
|
if (keys %{$tbl})
|
|
{
|
|
local $, = "\n";
|
|
print "\n";
|
|
print map { &{$fnc}($_, $tbl->{$_}) } sort { ${$tbl}{$a} cmp ${$tbl}{$b} } keys %{$tbl};
|
|
print "\n";
|
|
}
|
|
}
|
|
|
|
sub output_decls($$)
|
|
{
|
|
my ($tbl, $fnc) = @_;
|
|
if (keys %{$tbl})
|
|
{
|
|
local $, = "\n";
|
|
print "\n";
|
|
print map { &{$fnc}($_, $tbl->{$_}) } sort keys %{$tbl};
|
|
print "\n";
|
|
}
|
|
}
|
|
|
|
sub output_exacts($$)
|
|
{
|
|
my ($tbl, $fnc) = @_;
|
|
if (scalar @{$tbl})
|
|
{
|
|
local $, = "\n";
|
|
print "\n";
|
|
print map { &{$fnc}($_) } sort @{$tbl};
|
|
print "\n";
|
|
}
|
|
}
|
|
|