summaryrefslogtreecommitdiff
path: root/devel
diff options
context:
space:
mode:
authorJohn Millaway <john43@users.sourceforge.net>2002-09-09 19:25:56 +0000
committerJohn Millaway <john43@users.sourceforge.net>2002-09-09 19:25:56 +0000
commitb670bc6c09e8bd33f48db9f1db3782eac0b0b0b4 (patch)
tree6581909a842d6bc1ed15f0af17cee697600fe5c1 /devel
parenta953d6fb60d4221ef08d90820f015fb58678b48a (diff)
Table deserialization works for everything except --fast scanners.
Scanners can auto-verify serialized table integrity via --tables-verify. Added tables API items to TODO list. test-table-opts is becoming exhaustive (a good thing).
Diffstat (limited to 'devel')
-rw-r--r--devel/dump-tables.pl94
1 files changed, 10 insertions, 84 deletions
diff --git a/devel/dump-tables.pl b/devel/dump-tables.pl
index 31919f6..1515e18 100644
--- a/devel/dump-tables.pl
+++ b/devel/dump-tables.pl
@@ -1,95 +1,21 @@
#! /usr/bin/perl -w
# vim:set ft=perl ai si et ts=4 sts=4 sw=4 tw=0:
-# USAGE: dump-tables.pl FILE
+# USAGE: dump-tables.pl FILE [max-data]
use strict;
-@ARGV == 1 || die "\nUSAGE: dump-tables.pl FILE\n";
-open FD, $ARGV[0] or die "$ARGV[0]: $!";
-
-my ($magic,$hsize) = (read32(),read32());
-my $rest = readn($hsize - 8);
-my ($ssize,$flags,$version,$name) = unpack 'Nna*', $rest;
-($version,$name) = split /\0/, $version;
+my $dir = $0;
+$dir =~ s:/[^/]+$::;
+push @INC, $dir;
+require "tables.pl";
-printf "th_magic: %08X\n", $magic;
-print "th_hsize: $hsize\n";
-print "th_ssize: $ssize\n";
-print "th_flags: $flags\n";
-print "th_version: $version\n";
-print "th_name: $name\n";
+@ARGV == 1 || @ARGV == 2 || die "\nUSAGE: dump-tables.pl FILE [max-data]\n";
+open FD, $ARGV[0] or die "$ARGV[0]: $!";
-my $bytes = $hsize;
+dump_hdr(read_hdr());
while(!eof FD){
- dump_table();
-}
-
-
-sub readn { my $s; read FD, $s, shift; return $s }
-sub read32 { my $n; read FD, $n, 4; return unpack 'i', pack 'i', unpack 'N',$n }
-sub read16 { my $n; read FD, $n, 2; return unpack 's', pack 's', unpack 'n',$n }
-sub read8 { my $n; read FD, $n, 1; return unpack 'c',$n }
-
-sub dump_table {
- my ($id,$flags,$hi,$lo) = (read16(),read16(),read32(),read32());
- my $max = 40;
- print "td_id: $id ($::TID{$id})\n".
- "td_flags: $flags (@{[TFLAGS($flags)]})\n".
- "td_hilen: $hi\n".
- "td_lolen: $lo\n";
-
- my $read = $::TFLAGS{$flags}->[1];
-
- my $tot = $lo * ($hi?$hi:1);
- $tot *=2 if $::TID{$id}eq 'YYT_ID_TRANSITION';
-
- my @d;
- for(1..$tot){
- my $v = $read->();
- if($max-- > 0){
- push @d, $v;
- }
- }
- print "td_data: ";
- print join ', ', @d;
- my $pad = pad64(tell FD);
- print "\npadding: $pad\n";
- while($pad-- > 0){ read8() }
- return tell FD;
-}
-
-sub TFLAGS {
- my @s;
- my $f = shift;
- foreach(keys %::TFLAGS){
- if ($f & $_){
- push @s, $::TFLAGS{$_}->[0]
- }
- }
- return join '|', @s;
-}
-
-sub pad64{ return ((8-((shift)%8))%8) }
-
-BEGIN {
- %::TID = (
- 0x01 => 'YYT_ID_ACCEPT' ,
- 0x02 => 'YYT_ID_BASE' ,
- 0x03 => 'YYT_ID_CHK' ,
- 0x04 => 'YYT_ID_DEF' ,
- 0x05 => 'YYT_ID_EC' ,
- 0x06 => 'YYT_ID_META' ,
- 0x07 => 'YYT_ID_NUL_TRANS' ,
- 0x08 => 'YYT_ID_NXT' ,
- 0x09 => 'YYT_ID_RULE_CAN_MATCH_EOL' ,
- 0x0A => 'YYT_ID_START_STATE_LIST' ,
- 0x0B => 'YYT_ID_TRANSITION');
-
- %::TFLAGS = (
- 0x01 => ['YYT_DATA8',\&read8] ,
- 0x02 => ['YYT_DATA16',\&read16] ,
- 0x04 => ['YYT_DATA32',\&read32] ,
- 0x08 => ['YYT_PTRANS',sub{}]);
+ dump_table(read_table(),$ARGV[1]);
}
+close FD;
1
__END__