1#! /usr/bin/perl 2# 3# Copyright (C) 2010 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_ENTRY\(([^,]+), ([^,]+), ([^\)]+)\)/) { 31 next; 32 } 33 my $type = $1; 34 my $name = $2; 35 my $args = $3; 36 37 my @args = split ',', $args; 38 my $len = scalar(@args); 39 my $nonVoidArgLen = 0; 40 for (my $num = 0; $num < $len; $num++) { 41 if ($args[$num] ne "void") { 42 $nonVoidArgLen++; 43 } 44 } 45 if ($type eq "void") { 46 printf("TRACE_GL_VOID("); 47 } else { 48 printf("TRACE_GL(%s, ", $type); 49 } 50 51 printf("%s, (%s), (", $name, $args); 52 for (my $num = 0; $num < $len; $num++) { 53 if ($args[$num] ne "void") { 54 if ($num > 0) { 55 print ", "; 56 } 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("), %d", $nonVoidArgLen); 70 for (my $num = 0; $num < $len; $num++) { 71 if ($args[$num] ne "void") { 72 # 73 # extract the name from the parameter 74 # type name 75 # const type *name 76 # type *name 77 # type name[4] 78 # 79 my $arg = $args[$num]; 80 if ($arg =~ /(\S+\s)+\**\s*([\w]+)/) { 81 my $name = $2; 82 if ($arg =~ /((const )*(\S+\s)+\**)\s*([\w]+)/) { 83 my $type = rtrim($1); 84 printf(", \"%s\", %s", $type, $name); 85 } 86 } 87 } 88 } 89 printf(")\n"); 90} 91 92 93 94 95 96