finish wf_add_var()
[gwave-svn.git] / utilities / sweepsplit.in
blob13d40e271e11b3171b25c891cc50845b14bbb439
1 #!@PERL@
3 # split the output of "sp2sp -s head" into multiple files, one per sweep.
6 use FileHandle;
7 use Getopt::Long;
9 sub usage {
10         print STDERR "usage: sweepsplit [options] [file  [name]]
11 or:    sp2sp -s head | sweepsplit [options]
12 Options:
13      -a Len         Use Len digits when constructing numered output file names
14      -s N           Dump only sweep number N to stdout
15      -t Type        Assume input is of type T (passed to sp2sp)
21 Getopt::Long::config('no_auto_abbrev',
22                      'no_ignore_case','no_ignore_case_always');
24 $dump_sweepno = -1;
25 $suffixlength = 2;
26 $verbose = 0;
27 $fnbase = '';
28 $nsweeps = 0;
30 %optctl = ("s=i"               => \$dump_sweepno,
31            "a|suffixlength=i"  => \$suffixlength,
32            "t=s"               => \$infile_type,
33            "v|verbose!"        => \$verbose
36 if(!GetOptions(%optctl)) {
37         &usage();
38         exit 1;
41 if($#ARGV >= 0) {  # input filename provided
42         $infname = shift(@ARGV);
44 if($#ARGV >= 0) {  # base part of output filenames specified
45         $fnbase = shift(@ARGV);
48 if(!$fnbase) { # If no output filename specified, construct one.
49         if($infname) {
50                 $fnbase = $infname;
51                 $fnbase =~ s|^.*/([^/]+)$|$1|;   # remove leading directory names
52                 $fnbase =~ s|\.[^.]*$||;   # remove trailing .suffix
53         } else {
54                 $fnbase = 'sp';
55         }
58 $infp = new FileHandle;
59 if($infname) {
60         if($infile_type) {
61                 $topt = "-t $infile_type";
62         }
63         $infp->open("sp2sp -s head $topt $infname|") || die "pipe from sp2sp $infname: $!";
64 } else {
65         $infp->fdopen(STDIN, "r");
69 $heads = $infp->getline;
71 while($_ = $infp->getline) {
73         if($_ =~ m/^\#\s*sweep\s*(\d+);/) {
74                 $sweepno = $1;
75                 open_outfile($sweepno);
76                 $nsweeps++;
77         } else {
78                 if(!$fp) {
79                         open_outfile(0);
80                         $nsweeps++;
81                 }
82                 print $fp $_;
83         }
86 $infp->close || "pipe from sp2sp $infname: $!";
88 if($fp) {
89         $fp->close;
90 } else {
91         print STDERR "no sweeps found\n";
92         exit 1;
95 printf "%d sweeps\n", $nsweeps;
97 exit 0;
98 #############################################################################
100 sub open_outfile
102         my($sweepno) = @_;
104         if($fp) {
105                 $fp->close;
106         }
107         if($dump_sweepno == -1 || $dump_sweepno == $sweepno) {
108                 $fname = sprintf "%s%0*d.asc", $fnbase, $suffixlength, $sweepno;
109         } else {
110                 $fname = '/dev/null';
111         }
112         $fp = new FileHandle $fname,"w";
113         if(!defined($fp)) {
114                 die "$fname: $!";
115         }
116         print $fp $heads;
117         
118         # would like to include sweep number as comment - but gwave
119         # can't deal with this.  to be fixed.
120         # print $fp $_;