-#!/usr/bin/perl -w
+#!/usr/bin/perl -plw
use strict;
-sub trans_lines($);
-
-my @xids=("WINDOW","VISUALTYPE","DRAWABLE","FONT","ATOM","COLORMAP","FONTABLE","GCONTEXT","PIXMAP","SCREEN");
-
-my $input = $ARGV[0];
-
-open(INFILE,"<",$input) or die("Couldn't open file $input.\n");
-
-my @in_data = <INFILE>;
-my @out_data;
-
-foreach my $line (@in_data) {
-
- if($line =~ /#[a-z]/ or $line =~ /print/ or $line =~ /\/\// or $line =~ /\/\*/) {
- $out_data[@out_data] = $line;
- next;
+BEGIN {
+ %::const = map { $_ => 1 } (
+ # constants in xcb.h
+ "XCBNone",
+ "XCBCopyFromParent",
+ "XCBCurrentTime",
+ "XCBNoSymbol",
+ "XCBError",
+ "XCBReply",
+ # renamed constants
+ "XCBButtonAny",
+ "XCBButton1",
+ "XCBButton2",
+ "XCBButton3",
+ "XCBButton4",
+ "XCBButton5",
+ "XCBHostInsert",
+ "XCBHostDelete",
+ );
+ open(CONST, shift) or die "failed to open constants list: $!";
+ while(<CONST>)
+ {
+ chomp;
+ die "invalid constant name: \"$_\"" unless /^XCB[A-Za-z0-9_]*$/;
+ $::const{$_} = 1;
}
-
- trans_lines($line);
+ close(CONST);
}
-
-foreach my $newline (@out_data) {
- print $newline;
-}
-
-#################
-sub trans_lines($)
+sub convert($$)
{
- my $line = $_[0];
-
- $line =~ s/XCB/xcb_/g;
-
- foreach my $xid (@xids) {
- if($line =~ /$xid/ and $line =~ /xcb_/) {
- my $lcxid = lc($xid);
-
- #var
- my $xidsp = $lcxid . " ";
- my $xidspun = $lcxid . "_t ";
+ local $_ = shift;
+ my ($fun) = @_;
- ##
- $line =~ s/$xid/$lcxid/g;
+ return "uint$1_t" if /^CARD(8|16|32)$/;
+ return "int$1_t" if /^INT(8|16|32)$/;
+ return "uint8_t" if $_ eq 'BOOL' or $_ eq 'BYTE';
+ return $_ if /^[A-Z]*_[A-Z_]*$/ or !/^XCB(.+)/;
+ my $const = defined $::const{$_};
+ $_ = $1;
- #var
- $line =~ s/$xidsp/$xidspun/g;
- }
- }
-
- #func without XID in it
- my $funcline = $line;
+ s/^(GX|RandR|XFixes|XP|XvMC)(.)/uc($1) . "_" . $2/e;
- if($funcline =~ /xcb_/) {
- $funcline =~ s/[A-Z]/"_" . lc($&)/eg;
- $funcline =~ s/__/_/g;
+ my %abbr = (
+ "Iter" => "iterator",
+ "Req" => "request",
+ "Rep" => "reply",
+ );
- if($funcline =~ /event/i) {
- $funcline =~ /event/i;
- $funcline = $` . "event" . "_t" . $';
+ s/([0-9]+|[A-Z](?:[A-Z]*|[a-z]*))_?(?=[0-9A-Z]|$)/"_" . ($abbr{$1} or lc($1))/eg;
- $funcline =~ s/__/_/g;
- }
+ $_ = "_family_decnet" if $_ eq "_family_de_cnet";
+ return "XCB" . uc($_) if $const;
- #repair NULL's
- $funcline =~ s/_n_u_l_l/NULL/g;
- #repair XCBSCREEN
- $funcline =~ s/s_c_r_e_e_n/screen/g;
- }
+ $_ .= "_t" unless $fun or /_id$/;
- $line = $funcline;
-
- $out_data[@out_data] = $line;
+ return "xcb" . $_;
}
+s/([_A-Za-z][_A-Za-z0-9]*)([ \t]*\()?/convert($1, defined $2) . ($2 or "")/eg;