source: trunk/src/archiving/tankplayer_tools/tanksniff.c @ 3179

Revision 3179, 4.1 KB checked in by paulf, 13 years ago (diff)

fixed tanksniff to report original datatype, not converted to local one

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <time.h>
5#include <trace_buf.h>
6#include <earthworm.h>
7#include <kom.h>
8#include <swap.h>
9#include <time_ew.h>
10
11/* tanksniff - a quick and dirty tank player tank  sniffing tool, shows output like sniffwave */
12
13#define VERSION "0.0.2 - 2007-12-15"
14main( int argc, char *argv[] )
15{
16  TracePacket   pkt;              /* tracebuf message read from file      */
17  FILE         *ifp;              /* file of waveform data to read from   */
18  double        hdtime;           /* time read from TRACEBUF2 header      */
19  long          nsamp;            /* #samples in this message             */
20  char          byte_order;       /* byte order of this TYPE_TRACEBUF2 msg */
21  int           byte_per_sample;  /* for TYPE_TRACEBUF2 msg               */
22  char          orig_datatype[3]; /* data type BEFORE WaveMsg2Local() */
23  long          datalen;
24  int           ib;
25  int           rc;
26  int           totbytes = 0;
27  char stime[30], etime[30];
28
29  if ( argc != 2 )
30  {
31    fprintf(stderr, "Usage: tanksniff <tankfile>\n" );
32    fprintf(stderr, " version %s\n", VERSION );
33    return( 0 );
34  }
35
36  /* Open a waveform files
37   ***********************/
38  ifp = fopen( argv[1], "rb" );
39  if ( ifp == NULL )
40  {
41    fprintf(stderr, "tanksniff: Cannot open tankfile <%s>\n", argv[1] );
42    return(1);
43  }
44
45  /* Read thru file reading headers; gather info about all tracebuf messages
46  **************************************************************************/
47  while( fread( pkt.msg, sizeof(char), sizeof( TRACE2_HEADER ), ifp ) 
48         == sizeof( TRACE2_HEADER ) ) 
49  {
50     hdtime          = pkt.trh.endtime;
51     nsamp           = pkt.trh.nsamp;
52     byte_order      = pkt.trh.datatype[0];
53     byte_per_sample = atoi(&pkt.trh.datatype[1]);
54     strcpy(orig_datatype, pkt.trh.datatype);
55#ifdef _SPARC
56     if( byte_order == 'i' || byte_order == 'f' ) 
57     {
58       SwapLong( &nsamp );
59       SwapDouble( &hdtime );
60     }
61#endif
62#ifdef _INTEL
63     if( byte_order == 's' || byte_order == 't' )
64     {
65       SwapLong( &nsamp );
66       SwapDouble( &hdtime );
67     }
68#endif
69
70     if ( (rc=WaveMsg2MakeLocal( &pkt.trh2 )) < 0 )
71     {
72       fprintf(stderr, "tanksniff: WaveMsg2MakeLocal() error.\n" );
73       fprintf(stderr,"tbuf: %4s %3s %2s %2s  %13.2f+%4.2f %3d %3d %s %d at offset: %d\n",
74             pkt.trh2.sta, pkt.trh2.chan, pkt.trh2.net, pkt.trh2.loc,
75             pkt.trh2.starttime, pkt.trh2.endtime-pkt.trh2.starttime,
76             pkt.trh2.nsamp, (int)(pkt.trh2.samprate),
77             "*** WM2ML BARFED:", rc, totbytes);
78       if(rc == -1)
79       {
80         fprintf(stderr, "tanksniff: WaveMsg2MakeLocal() failed!  Processor hopelessly lost at offset %d.  quitting!\n",
81               totbytes);
82         exit(1);
83       }
84     }
85
86     /* simulate sniffwave output */
87      datestr23 (pkt.trh2.starttime, stime, 256);
88      datestr23 (pkt.trh2.endtime,   etime, 256);
89      fprintf( stdout, "%s.%s.%s.%s (0x%x 0x%x) ",
90                   pkt.trh2.sta, pkt.trh2.chan, pkt.trh2.net, pkt.trh2.loc, pkt.trh2.version[0], pkt.trh2.version[1] );
91      if (pkt.trh2.samprate < 1.0) { /* more decimal places for slower sample rates */
92          fprintf( stdout, "%d %s %4d %6.4f %s (%.4f) %s (%.4f) %c%c \n",
93               pkt.trh2.pinno, orig_datatype, pkt.trh2.nsamp, pkt.trh2.samprate,
94               stime, pkt.trh2.starttime,
95               etime, pkt.trh2.endtime, pkt.trh2.quality[0], pkt.trh2.quality[1] );
96      } else {
97          fprintf( stdout, "%d %s %4d %.1f %s (%.4f) %s (%.4f) %c%c ",
98                         pkt.trh2.pinno, orig_datatype, pkt.trh2.nsamp, pkt.trh2.samprate,
99                         stime, pkt.trh2.starttime,
100                         etime, pkt.trh2.endtime, pkt.trh2.quality[0], pkt.trh2.quality[1] );
101      }
102      fprintf(stdout, "\n");
103
104
105     /* Store pertinent info about this tracebuf message
106     **************************************************/
107     datalen  = byte_per_sample * nsamp;
108     totbytes = datalen + sizeof( TRACE2_HEADER );
109     
110     /* Skip over data samples
111     ************************/
112     fseek( ifp, datalen, SEEK_CUR );
113
114  } /* end while first time thru */
115
116  fclose( ifp );
117  return( 0 );
118}
Note: See TracBrowser for help on using the repository browser.