| Jack Palevich | a2dd6cf | 2010-10-26 15:21:24 -0700 | [diff] [blame] | 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 |  |