summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/checkapi35
-rwxr-xr-xbin/checkposix2
-rwxr-xr-xbin/debug-ohdr26
-rwxr-xr-xbin/errors3
-rwxr-xr-xbin/h5vers154
-rwxr-xr-xbin/iostats40
6 files changed, 260 insertions, 0 deletions
diff --git a/bin/checkapi b/bin/checkapi
new file mode 100755
index 0000000..7447b26
--- /dev/null
+++ b/bin/checkapi
@@ -0,0 +1,35 @@
+#!/usr/bin/perl -w
+require 5.003;
+
+# Purpose: insures that API functions aren't called internally.
+# Usage: checkapi H5*.c
+my $comment = 0;
+while (<>) {
+
+ # Remove comments within the line.
+ s/\/\*.*?\*\///g;
+
+ # Process comment begin and end tokens on this line.
+ $comment-- if /\*\//; # count comment ends
+ next if $comment; # skip line if in comment
+ $comment++ if /\/\*/; # count comment starts
+ s/(.*)\/\*.*/$1/; # remove comments that begin on this line
+
+ # Remove character strings
+ s/\\.//g; # remove escaped characters
+ s/\".*?\"//g; # remove string constants
+
+ # Disregard the following hits
+ next if /^H5/;
+ next if /^\#/;
+ next if /FUNC_ENTER/;
+
+ next unless /(H5[A-Z]{1,2}[a-z]\w*)/;
+ print "$ARGV:$.: $1\n";
+} continue {
+ if (eof) {
+ print "$ARGV:$.: bad comment nesting\n" if $comment;
+ $comment = 0;
+ close ARGV; # reset line number
+ }
+}
diff --git a/bin/checkposix b/bin/checkposix
index 229a106..ef2951b 100755
--- a/bin/checkposix
+++ b/bin/checkposix
@@ -35,6 +35,8 @@ while (<>) {
# Get rid of string constants if they begin and end on this line.
s/([\'\"])([^\1]|\\\1)*?\1/$1$1/g;
+ # Get rid of preprocessor directives
+ s/^\#.*//;
# Now find all function calls on this line
while (($name)=/\b([a-gi-z_A-GI-Z]\w*)\s*\(/) {
diff --git a/bin/debug-ohdr b/bin/debug-ohdr
new file mode 100755
index 0000000..f176a58
--- /dev/null
+++ b/bin/debug-ohdr
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+require 5.003;
+
+# Looks for lines emitted by H5O_open() and H5O_close() and tries to
+# determine which objects were not properly closed.
+
+while (<>) {
+ next unless /^([<>])(0x[\da-f]+|\d+)$/;
+ my ($op, $addr) = ($1, $2);
+
+ if ($op eq ">") {
+ # Open object
+ $obj{$addr} += 1;
+ } else {
+ # Close object
+ die unless $obj{$addr}>0;
+ $obj{$addr} -= 1;
+ delete $obj{$addr} unless $obj{$addr};
+ }
+}
+
+for (sort keys %obj) {
+ printf "%3d %s\n", $obj{$_}, $_;
+}
+
+exit 0;
diff --git a/bin/errors b/bin/errors
index 28585cd..1393226 100755
--- a/bin/errors
+++ b/bin/errors
@@ -2,6 +2,9 @@
require 5.003;
use Text::Tabs;
+# NOTE: THE FORMAT OF HRETURN_ERROR AND HGOTO_ERROR MACROS HAS
+# CHANGED. THIS SCRIPT NO LONGER WORKS! --rpm
+
# Copyright (C) 1997 National Center for Supercomputing Applications.
# All rights reserved.
#
diff --git a/bin/h5vers b/bin/h5vers
new file mode 100755
index 0000000..a4ddefc
--- /dev/null
+++ b/bin/h5vers
@@ -0,0 +1,154 @@
+#!/usr/bin/perl -w
+require 5.003;
+
+### Copyright © 1998 NCSA.
+# Robb Matzke <matzke@llnl.gov>
+# 17 July 1998
+
+### Purpose
+# Increments the hdf5 version number by changing the value of
+# constants in the src/H5public.h file. The new version number is
+# printed on the standard output. An alternate source file name can be
+# specified as an argument. In any case, the original file is saved
+# by appending a tilde `~' to the name.
+
+### Usage:
+# h5vers [OPTIONS] [FILE]
+
+# Without options this program only displays the current version and
+# doesn't modify any files or create backups. The default is to print
+# the version number as a dotted triple like `1.0.24' but with the
+# `-v' option the version will be printed as `version 1.0 release 24'.
+#
+# The `-s VERSION' switch will set the version as specified. If the
+# string contains a dotted triple then it will be used as the version
+# number, otherwise up to three numbers will be read from the end of
+# the string and used as the major version, minor version, and release
+# number. If any numbers are missing then zero is assumed. This
+# allows versions to be specified like `-s "version 2.1 release 8"' or
+# `-s hdf5-2.1.8.tar.bz2'. If the new version is less than the old
+# version then a warning message is generated on standard error.
+#
+# The `-i [major|minor|release]' option increments the major, minor,
+# or release (the default) number. If the minor number is incremented
+# then the release number is set to zero; if the major number is
+# incremented then the minor and release numbers are set to zero.
+#
+# If a file is specified then that file is used instead of
+# ./H5public.h or ./src/H5public.h.
+##############################################################################
+
+sub getvers {
+ local ($_) = @_;
+ my (@vers);
+
+ ($vers[0]) = /^\#\s*define\s+H5_VERS_MAJOR\s+(\d+)/m;
+ ($vers[1]) = /^\#\s*define\s+H5_VERS_MINOR\s+(\d+)/m;
+ ($vers[2]) = /^\#\s*define\s+H5_VERS_RELEASE\s+(\d+)/m;
+ return @vers;
+}
+
+sub setvers {
+ my ($contents, @vers) = @_;
+ $_[0] =~ s/^(\#\s*define\s+H5_VERS_MAJOR\s+)\d+/$1$vers[0]/m;
+ $_[0] =~ s/^(\#\s*define\s+H5_VERS_MINOR\s+)\d+/$1$vers[1]/m;
+ $_[0] =~ s/^(\#\s*define\s+H5_VERS_RELEASE\s+)\d+/$1$vers[2]/m;
+}
+
+# Parse arguments
+my ($verbose, $set, $inc, $file);
+my (@files) = ("H5public.h", "src/H5public.h", "../src/H5public.h");
+while ($_ = shift) {
+ $_ eq "-s" && do {
+ die "-s switch needs a version number\n" unless @ARGV;
+ $set = shift;
+ next;
+ };
+
+ $_ eq "-i" && do {
+ die "-i switch needs a value\n" unless @ARGV;
+ $inc = shift;
+ next;
+ };
+
+ $_ eq "-v" && do {
+ $verbose = 1;
+ next;
+ };
+
+
+ /^-/ && die "unrecognized option: $ARGV[0]\n";
+ die "only one file name can be specified\n" if $file;
+ $file = _;
+}
+die "mutually exclusive options given\n" if $set && $inc;
+
+# Determine file to use
+unless ($file) {
+ for (@files) {
+ ($file=$_,last) if -f $_;
+ }
+}
+die "unable to read file: $file\n" unless -r $file;
+
+# Get the current version number.
+open FILE, $file or die "unable to open $file: $!\n";
+my ($contents) = join "", <FILE>;
+close FILE;
+my (@curver) = getvers $contents;
+
+# Determine the new version number.
+if ($set) {
+ if ($set =~ /(\d+)\.(\d+)\.(\d+)/) {
+ @newver = ($1, $2, $3);
+ } elsif ($set =~ /(\d+)\D+(\d+)\D+(\d+)\D*$/) {
+ @newver = ($1, $2, $3);
+ } elsif ($set =~ /(\d+)\D+(\d+)\D*$/) {
+ @newver = ($1, $2, 0);
+ } elsif ($set =~ /(\d+)\D*$/) {
+ @newver = ($1, 0, 0);
+ } else {
+ die "illegal version number specified: $set\n";
+ }
+} elsif ($inc && $inc eq "major") {
+ $newver[0] = $curver[0]+1;
+ @newver[1,2] = (0,0);
+} elsif ($inc && $inc eq "minor") {
+ $newver[0] = $curver[0];
+ $newver[1] = $curver[1]+1;
+ $newver[2] = 0;
+} elsif ($inc && $inc eq "release") {
+ @newver[0,1] = @curver[0,1];
+ $newver[2] = $curver[2]+1;
+} elsif ($inc) {
+ die "unknown increment field: $inc\n";
+} else {
+ @newver = @curver;
+}
+
+# Print a warning if the version got smaller.
+if ($newver[0]*1000000 + $newver[1]*1000 + $newver[2] <
+ $curver[0]*1000000 + $curver[1]*1000 + $curver[2]) {
+ printf STDERR "Warning: version decreased from %d.%d.%d to %d.%d.%d\n",
+ @curver, @newver;
+}
+
+# Update the version number if it changed.
+if ($newver[0]!=$curver[0] ||
+ $newver[1]!=$curver[1] ||
+ $newver[2]!=$curver[2]) {
+ setvers $contents, @newver or die "unable to set version\n";
+ rename $file, "$file~" or die "unable to save backup file\n";
+ open FILE, ">$file" or die "unable to open $file but backup saved!\n";
+ print FILE $contents;
+ close FILE;
+}
+
+# Print the new version number
+if ($verbose) {
+ printf "version %d.%d release %d\n", @newver;
+} else {
+ printf "%d.%d.%d\n", @newver;
+}
+
+exit 0;
diff --git a/bin/iostats b/bin/iostats
new file mode 100755
index 0000000..924c273
--- /dev/null
+++ b/bin/iostats
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+
+# Usage: pipe the output of Linux's `strace' program into the stdin of
+# this command, and the output of this command into gnuplot.
+
+$filename = shift || "tstab2.h5";
+$total = 0;
+
+while (<>) {
+ if (!defined $fd) {
+ if (/^open\("(.*?)".*=\s+(\d+)/ && $1 eq $filename) {
+ $fd = $2;
+ $pos = 0;
+ }
+ } elsif (/^close\((\d+)/ && $1==$fd) {
+ $fd = undef;
+ } elsif (/^lseek\((\d+), -?\d+,.*= (\d+)/ &&
+ $1==$fd && $2>=0) {
+ $pos = $2;
+ } elsif (/^lseek\((\d+),/ && $1==$fd) {
+ die $_;
+ } elsif (/^write\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
+ $1==$fd && $3>=0) {
+ my $nbytes = $3;
+ printf "%d %d\n", $total, $pos;
+ $pos += $nbytes;
+ $total += $nbytes;
+ } elsif (/^write\((\d+),/ && $1==$fd) {
+ die $_;
+ } elsif (/^read\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
+ $1==$fd && $3>=0) {
+ my $nbytes = $3;
+ printf "%d %d\n", $total, $pos;
+ $pos += $nbytes;
+ $total += $nbytes;
+ } elsif (/^read\((\d+),/ && $1==$fd) {
+ die $_;
+ }
+}
+