153238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian#! /usr/bin/perl
253238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian#
353238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# Copyright (C) 2008 Google Inc.
453238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian#
553238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# Licensed under the Apache License, Version 2.0 (the "License");
653238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# you may not use this file except in compliance with the License.
753238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# You may obtain a copy of the License at
853238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian#
953238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian#      http://www.apache.org/licenses/LICENSE-2.0
1053238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian#
1153238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# Unless required by applicable law or agreed to in writing, software
1253238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# distributed under the License is distributed on an "AS IS" BASIS,
1353238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1453238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# See the License for the specific language governing permissions and
1553238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian# limitations under the License.
1653238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian
1753238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopianuse strict;
1853238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian
19b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopiansub rtrim($)
20b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian{
21b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian    my $string = shift;
22b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian    $string =~ s/\s+$//;
23b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian    return $string;
24b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian}
25b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian
2653238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopianwhile (my $line = <>) {
2753238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  next if $line =~ /^\//;
2853238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  next if $line =~ /^#/;
2953238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  next if $line =~ /^\s*$/;
30b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian  if ($line !~ /^GL_API(CALL)?\s+(.+)\s+GL_APIENTRY\s+([\w]+)\s*\(([^\)]+)\);/) {
3153238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian    next;
3253238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  }
33b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian  my $type = rtrim($2);
34b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian  my $name = $3;
35b1a39d67be99fe6c4545b25e10ac82a5dd1df634Mathias Agopian  my $args = $4;
3653238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian
37b519abb606c819c446a408f422530268b21a100bMathias Agopian  #printf("%s", $line);
38b519abb606c819c446a408f422530268b21a100bMathias Agopian  
39b519abb606c819c446a408f422530268b21a100bMathias Agopian  my $prefix = "";
4048d438d05f14c2f4bd83ae89f520368cd49122dfMathias Agopian  if ($name eq "glGetString") {
4148d438d05f14c2f4bd83ae89f520368cd49122dfMathias Agopian    $prefix = "__";
4248d438d05f14c2f4bd83ae89f520368cd49122dfMathias Agopian  }
43b519abb606c819c446a408f422530268b21a100bMathias Agopian  
44b519abb606c819c446a408f422530268b21a100bMathias Agopian  printf("%s API_ENTRY(%s%s)(%s)", $type, $prefix, $name, $args);
45b519abb606c819c446a408f422530268b21a100bMathias Agopian  
46b519abb606c819c446a408f422530268b21a100bMathias Agopian  printf(" {\n");
4753238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  if ($type eq "void") {
4853238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian    printf("    CALL_GL_API(%s", $name);
4953238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  } else {
5053238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian    printf("    CALL_GL_API_RETURN(%s", $name);
5153238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  }
52b519abb606c819c446a408f422530268b21a100bMathias Agopian  my @args = split ',', $args;
53b519abb606c819c446a408f422530268b21a100bMathias Agopian  my $len = scalar(@args);
5453238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  for (my $num = 0; $num < $len; $num++) {
5553238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian    if ($args[$num] ne "void") {
5653238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian      print ", ";
57b519abb606c819c446a408f422530268b21a100bMathias Agopian      #
58b519abb606c819c446a408f422530268b21a100bMathias Agopian      # extract the name from the parameter
59b519abb606c819c446a408f422530268b21a100bMathias Agopian      # type name
60b519abb606c819c446a408f422530268b21a100bMathias Agopian      # const type *name
61b519abb606c819c446a408f422530268b21a100bMathias Agopian      # type *name
62b519abb606c819c446a408f422530268b21a100bMathias Agopian      # type name[4]
63b519abb606c819c446a408f422530268b21a100bMathias Agopian      #
64b519abb606c819c446a408f422530268b21a100bMathias Agopian      if ($args[$num] =~ /(\S+\s)+\**\s*([\w]+)/) {
65b519abb606c819c446a408f422530268b21a100bMathias Agopian        printf("%s", $2);
66b519abb606c819c446a408f422530268b21a100bMathias Agopian      }
6753238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian    }
6853238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian  }
69b519abb606c819c446a408f422530268b21a100bMathias Agopian  printf(");\n");
70b519abb606c819c446a408f422530268b21a100bMathias Agopian  printf("}\n");
7153238bddeab7b4633bfdb59fac67b0af1211955aMathias Agopian}
72b519abb606c819c446a408f422530268b21a100bMathias Agopian
73b519abb606c819c446a408f422530268b21a100bMathias Agopian
74b519abb606c819c446a408f422530268b21a100bMathias Agopian
75b519abb606c819c446a408f422530268b21a100bMathias Agopian
76b519abb606c819c446a408f422530268b21a100bMathias Agopian
77