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 17 use strict; 18 19 sub rtrim($) 20 { 21 my $string = shift; 22 $string =~ s/\s+$//; 23 return $string; 24 } 25 26 while (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