From d82e6551de2b9f3215fd5f58085097d47a6864b9 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 30 Nov 2006 05:53:41 +0000 Subject: did lots of renaming to the new [hidio] name, removed a little bit of cruft. Builds on Mac OS X, but doesn't load yet :-/. hidio_setup() gets called successfully, but for some reason hidio_new() does not seem to get called svn path=/trunk/externals/io/hidio/; revision=6533 --- make-arrays-from-input.h.pl | 321 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 321 insertions(+) create mode 100755 make-arrays-from-input.h.pl (limited to 'make-arrays-from-input.h.pl') diff --git a/make-arrays-from-input.h.pl b/make-arrays-from-input.h.pl new file mode 100755 index 0000000..2b261e7 --- /dev/null +++ b/make-arrays-from-input.h.pl @@ -0,0 +1,321 @@ +#!/usr/bin/perl -w + +use Switch; + +#======================================================================== +# FUNCTIONS +#======================================================================== + +#------------------------------------------------------------------------ +# parse out the types and codes from a line from the header +# usage: @dataArray initArrayWithGenericNames( $arrayName, $arrayMax ); +sub initArrayWithGenericNames +{ + my $arrayName = shift; + my $arrayMax = shift; + my @returnArray; + + my $displayName = lc( $arrayName ); +# print "$displayName $arrayMax "; + for( $i=0; $i<$arrayMax; ++$i ) + { + $returnArray[$i] = "${displayName}_$i"; + } + + return @returnArray; +} + +#------------------------------------------------------------------------ +# parse out the types and codes from a line from the header +# usage: @dataArray getDataFromHeaderLine($lineFromHeader); +sub getDataFromHeaderLine +{ + $_ = shift; + + my @returnArray; + + if ( m/#define ([A-Z0-9_]*)\s+(0x)?([0-9a-f]+)/) + { + if ($2) { $index = hex($3); } else { $index = $3; } + if ($index >= 0) + { + $returnArray[0] = $index; + $returnArray[1] = lc("$1"); + return @returnArray; + } +# print "$1 \t\t\t $index $#returnArray\n "; +# if ($index == 0) { print("index: $index 3: $3 2: $2 1: $1 value: $returnArray[1]\n"); } + } +} + +#------------------------------------------------------------------------ +# +# this is under construction to make the MAX switch structure cleaner +# donno if it works yet. +sub createNewArray +{ + my $myTypeName = shift; + my $myTypeMaxName = shift; + + my $myIndex; + my $myValue; + my @myNewArray; + + ($myIndex, $myValue) = getDataFromHeaderLine($myTypeMaxName); + @myNewArray = initArrayWithGenericNames( $myTypeName, $myIndex + 1 ); + + return @myNewArray; +} + + +#------------------------------------------------------------------------ +# declare each array in the header +# +sub printCArrayDeclarations +{ + my @arrayToPrint = @_; + + print(HEADER "char *${arrayToPrint[0]}[$#arrayToPrint];\n"); +} + +#------------------------------------------------------------------------ +# print an array out in C format +# +sub printCArray +{ + my @arrayToPrint = @_; + +# print("$arrayToPrint[0] $#arrayToPrint \n"); + + print(ARRAYS "int ${arrayToPrint[0]}_total = $#arrayToPrint; /* # of elements in array */\n"); + print(ARRAYS "char *${arrayToPrint[0]}[$#arrayToPrint] = {"); + + for(my $i = 1; $i < $#arrayToPrint; $i++) + { + # format nicely in sets of 6 + if ( ($i+4)%6 == 5 ) { print(ARRAYS "\n "); } + # only print if there is data + if ($arrayToPrint[$i]) { print(ARRAYS "\"$arrayToPrint[$i]\","); } +# else { print(ARRAYS "${arrayType}_$i,"); } + } + + print(ARRAYS "\"$arrayToPrint[$#arrayToPrint]\"\n };\n\n\n"); +} + +#------------------------------------------------------------------------ +# print an array out in a comment table in Pd +# +sub printPdFile +{ + my @arrayToPrint = @_; + my $x; + my $y; + my $lineNum = 1; + + my $PDFILENAME = "doc/$arrayToPrint[0]-list.pd"; + open(PDFILE, ">$PDFILENAME"); + + print(PDFILE "#N canvas 282 80 210 570 10;\n"); + if ($arrayToPrint[0] eq "ev") { print(PDFILE "#X text 5 5 Event Types;\n"); } + else { print(PDFILE "#X text 5 5 Codes for Type: $arrayToPrint[0];\n"); } + print(PDFILE "#X text 5 20 ----------------------------;\n"); + + for($i = 1; $i <= $#arrayToPrint; $i++) + { + # if the array element's data is null, print NULL + if ($arrayToPrint[$i]) + { + $x = 5; + $y = $lineNum * 20 + 20; + print(PDFILE "#X text $x $y $arrayToPrint[$i];\n"); + $lineNum++; + } + } + + close(PDFILE); +} + +#------------------------------------------------------------------------ +# +# +sub printArray +{ + printPdFile(@_); + printCArray(@_); + printCArrayDeclarations(@_); +} + +#======================================================================== +# MAIN +#======================================================================== + +# source file +$SOURCEFILENAME = "linux/input.h"; +open(INPUT_H, "<$SOURCEFILENAME"); + +# output files +$HEADERFILENAME = "input_arrays.h"; +open(HEADER, ">$HEADERFILENAME"); +$ARRAYSFILENAME = "input_arrays.c"; +open(ARRAYS, ">$ARRAYSFILENAME"); + + +#---------------------------------------- +# create the arrays from INPUT_H +# find array MAX for each one +while () +{ + if (m/\#define (FF_STATUS|[A-Z_]+?)_MAX/) + { + switch( $1 ) { + # types + case "EV" { ($index, $value) = getDataFromHeaderLine($_); + @EV = initArrayWithGenericNames( "EV", $index + 1 ); } + # codes + case "SYN" { ($index, $value) = getDataFromHeaderLine($_); + @SYN = initArrayWithGenericNames( "SYN", $index + 1 ); } + case "KEY" { ($index, $value) = getDataFromHeaderLine($_); + @KEY = initArrayWithGenericNames( "KEY", $index + 1 ); } +# BTN codes are actually part of the KEY type, so this array is unused +# case "BTN" { ($index, $value) = getDataFromHeaderLine($_); +# @BTN = initArrayWithGenericNames( "KEY", $index + 1 ); } + case "REL" { ($index, $value) = getDataFromHeaderLine($_); + @REL = initArrayWithGenericNames( "REL", $index + 1 ); } + case "ABS" { ($index, $value) = getDataFromHeaderLine($_); + @ABS = initArrayWithGenericNames( "ABS", $index + 1 ); } + case "MSC" { ($index, $value) = getDataFromHeaderLine($_); + @MSC = initArrayWithGenericNames( "MSC", $index + 1 ); } + case "LED" { ($index, $value) = getDataFromHeaderLine($_); + @LED = initArrayWithGenericNames( "LED", $index + 1 ); } + case "SND" { ($index, $value) = getDataFromHeaderLine($_); + @SND = initArrayWithGenericNames( "SND", $index + 1 ); } + case "REP" { ($index, $value) = getDataFromHeaderLine($_); + @REP = initArrayWithGenericNames( "REP", $index + 1 ); } + case "FF" { ($index, $value) = getDataFromHeaderLine($_); + @FF = initArrayWithGenericNames( "FF", $index + 1 ); } + # there doesn't seem to be any PWR events yet... +# case "PWR" { ($index, $value) = getDataFromHeaderLine($_); +# @PWR = initArrayWithGenericNames( "PWR", $index + 1 ); } + case "FF_STATUS" { ($index, $value) = getDataFromHeaderLine($_); + @FF_STATUS = initArrayWithGenericNames( "FF_STATUS", $index + 1 ); } + } + } +} + +# there is no SYN_MAX defined in input.h, so we set it here: +@SYN = initArrayWithGenericNames( "SYN", 512 ); + + +seek( INPUT_H, 0, 0 ); +while () +{ +# get data from input.h + if (m/\#define (FF_STATUS|[A-Z_]*?)_/) + { +# filter EV_VERSION and *_MAX + m/\#define\s+(EV_VERSION|[A-Z_]+_MAX)\s+/; +# print "$1 \n"; + switch ($1) + { + # types + case "EV" { ($index, $value) = getDataFromHeaderLine($_); $EV[$index] = $value; } + # codes + case "SYN" { ($index, $value) = getDataFromHeaderLine($_); $SYN[$index] = $value; } + case "KEY" { ($index, $value) = getDataFromHeaderLine($_); $KEY[$index] = $value; } +# BTN codes are actually part of the KEY type + case "BTN" { ($index, $value) = getDataFromHeaderLine($_); $KEY[$index] = $value; } + case "REL" { ($index, $value) = getDataFromHeaderLine($_); $REL[$index] = $value; } + case "ABS" { ($index, $value) = getDataFromHeaderLine($_); $ABS[$index] = $value; } + case "MSC" { ($index, $value) = getDataFromHeaderLine($_); $MSC[$index] = $value; } + case "LED" { ($index, $value) = getDataFromHeaderLine($_); $LED[$index] = $value; } + case "SND" { ($index, $value) = getDataFromHeaderLine($_); $SND[$index] = $value; } + case "REP" { ($index, $value) = getDataFromHeaderLine($_); $REP[$index] = $value; } + case "FF" { ($index, $value) = getDataFromHeaderLine($_); $FF[$index] = $value; } +# there doesn't seem to be any PWR events yet... +# case "PWR" { ($index, $value) = getDataFromHeaderLine($_); $PWR[$index] = $value; } + case "FF_STATUS" { ($index, $value) = getDataFromHeaderLine($_); $FF_STATUS[$index] = $value; } +# else { print " none $_"; } + } + } +} + +#---------------------------------------- +# create the files from the arrays + +# print file headers +print(ARRAYS "#include \"hidio.h\"\n\n"); + +print(HEADER "\#ifndef _INPUT_ARRAYS_H\n"); +print(HEADER "\#define _INPUT_ARRAYS_H\n\n\n"); + +# strip the ev_ from the type names +for ($i=0; $i <= $#EV; ++$i) { + $_ = $EV[$i]; + s/ev_([a-z_])/\1/; + $EVtemp[$i] = $_; +} + +# generate a C array for each array and stick them all in the same file +printArray("ev",@EVtemp); +printArray("ev_syn",@SYN); +printArray("ev_key",@KEY); +printArray("ev_rel",@REL); +printArray("ev_abs",@ABS); +printArray("ev_msc",@MSC); +printArray("ev_led",@LED); +printArray("ev_snd",@SND); +printArray("ev_rep",@REP); +printArray("ev_ff",@FF); +# there doesn't seem to be any PWR events yet... +#printArray("pwr",@PWR); +print(ARRAYS "char *ev_pwr[1] = { NULL };\n\n"); +print(HEADER "char *ev_pwr[1];\n"); +# +printArray("ev_ff_status",@FF_STATUS); + +#------------------------------------------------------------------------------# +# print fake event type arrays +for( my $i = 0; $i <= $#EV; $i++ ) +{ + # format nicely in sets of 6 + if ( ($i+4)%6 == 5 ) { print(ARRAYS "\n "); } + + $_ = $EV[$i]; + if ( m/(ev_[0-9]+)/ ) + { + $temp[0] = $1; + for( $j=1; $j<=16; ++$j ) + { + $temp[$j] = "ev_${i}_${j}"; + } + printCArray(@temp); + printCArrayDeclarations(@temp); + } +} + +#------------------------------------------------------------------------------# +# print array of arrays +print(HEADER "char **event_names[",$#EV+1,"];\n\n"); +print(ARRAYS "char **event_names[",$#EV+1,"] = {"); +for( $i = 0; $i < $#EV; $i++ ) +{ + # format nicely in sets of 6 + if ( ($i+4)%6 == 5 ) { print(ARRAYS "\n "); } + + $_ = $EV[$i]; + m/(ev_[0-9a-z_]+)/; + print(ARRAYS "$1,"); +} +$_ = $EV[$#EV]; +m/(ev_[0-9a-z_]+)/; +print(ARRAYS "$1\n };\n"); + +# print file footers +print(HEADER "\n\n\#endif /* #ifndef _INPUT_ARRAYS_H */\n"); + +close(ARRAYS); +close(HEADER); +close(INPUT_H); + + + -- cgit v1.2.1