1#! /usr/bin/perl 2# 3# Copyright (C) 2008 Google Inc. 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17use strict; 18 19sub rtrim($) 20{ 21 my $string = shift; 22 $string =~ s/\s+$//; 23 return $string; 24} 25 26while (my $line = <>) { 27 next if $line =~ /^\//; 28 next if $line =~ /^#/; 29 next if $line =~ /^\s*$/; 30 if ($line !~ /^GL_API(CALL)?\s+(.+)\s+GL_APIENTRY\s+([\w]+)\s*\(([^\)]+)\);/) { 31 next; 32 } 33 my $type = rtrim($2); 34 my $name = $3; 35 my $args = $4; 36 37 #printf("%s", $line); 38 39 my $prefix = ""; 40 if ($name eq "glGetString") { 41 $prefix = "__"; 42 } 43 44 printf("%s API_ENTRY(%s%s)(%s)", $type, $prefix, $name, $args); 45 46 printf(" {\n"); 47 if ($type eq "void") { 48 printf(" CALL_GL_API(%s", $name); 49 } else { 50 printf(" CALL_GL_API_RETURN(%s", $name); 51 } 52 my @args = split ',', $args; 53 my $len = scalar(@args); 54 for (my $num = 0; $num < $len; $num++) { 55 if ($args[$num] ne "void") { 56 print ", "; 57 # 58 # extract the name from the parameter 59 # type name 60 # const type *name 61 # type *name 62 # type name[4] 63 # 64 if ($args[$num] =~ /(\S+\s)+\**\s*([\w]+)/) { 65 printf("%s", $2); 66 } 67 } 68 } 69 printf(");\n"); 70 printf("}\n"); 71} 72 73 74 75 76 77