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

Revision 3095, 4.0 KB checked in by paulf, 13 years ago (diff)

minor patches

  • 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.1 - 2007-08-25"
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  long          datalen;
23  int           ib;
24  int           rc;
25  int           totbytes = 0;
26  char stime[30], etime[30];
27
28  if ( argc != 2 )
29  {
30    fprintf(stderr, "Usage: tanksniff <tankfile>\n" );
31    fprintf(stderr, " version %s\n", VERSION );
32    return( 0 );
33  }
34
35  /* Open a waveform files
36   ***********************/
37  ifp = fopen( argv[1], "rb" );
38  if ( ifp == NULL )
39  {
40    fprintf(stderr, "tanksniff: Cannot open tankfile <%s>\n", argv[1] );
41    return(1);
42  }
43
44  /* Read thru file reading headers; gather info about all tracebuf messages
45  **************************************************************************/
46  while( fread( pkt.msg, sizeof(char), sizeof( TRACE2_HEADER ), ifp ) 
47         == sizeof( TRACE2_HEADER ) ) 
48  {
49     hdtime          = pkt.trh.endtime;
50     nsamp           = pkt.trh.nsamp;
51     byte_order      = pkt.trh.datatype[0];
52     byte_per_sample = atoi(&pkt.trh.datatype[1]);
53#ifdef _SPARC
54     if( byte_order == 'i' || byte_order == 'f' ) 
55     {
56       SwapLong( &nsamp );
57       SwapDouble( &hdtime );
58     }
59#endif
60#ifdef _INTEL
61     if( byte_order == 's' || byte_order == 't' )
62     {
63       SwapLong( &nsamp );
64       SwapDouble( &hdtime );
65     }
66#endif
67
68     if ( (rc=WaveMsg2MakeLocal( &pkt.trh2 )) < 0 )
69     {
70       fprintf(stderr, "tanksniff: WaveMsg2MakeLocal() error.\n" );
71       fprintf(stderr,"tbuf: %4s %3s %2s %2s  %13.2f+%4.2f %3d %3d %s %d at offset: %d\n",
72             pkt.trh2.sta, pkt.trh2.chan, pkt.trh2.net, pkt.trh2.loc,
73             pkt.trh2.starttime, pkt.trh2.endtime-pkt.trh2.starttime,
74             pkt.trh2.nsamp, (int)(pkt.trh2.samprate),
75             "*** WM2ML BARFED:", rc, totbytes);
76       if(rc == -1)
77       {
78         fprintf(stderr, "tanksniff: WaveMsg2MakeLocal() failed!  Processor hopelessly lost at offset %d.  quitting!\n",
79               totbytes);
80         exit(1);
81       }
82     }
83
84     /* simulate sniffwave output */
85      datestr23 (pkt.trh2.starttime, stime, 256);
86      datestr23 (pkt.trh2.endtime,   etime, 256);
87      fprintf( stdout, "%s.%s.%s.%s (0x%x 0x%x) ",
88                   pkt.trh2.sta, pkt.trh2.chan, pkt.trh2.net, pkt.trh2.loc, pkt.trh2.version[0], pkt.trh2.version[1] );
89      if (pkt.trh2.samprate < 1.0) { /* more decimal places for slower sample rates */
90          fprintf( stdout, "%d %s %4d %6.4f %s (%.4f) %s (%.4f) %c%c \n",
91               pkt.trh2.pinno, pkt.trh2.datatype, pkt.trh2.nsamp, pkt.trh2.samprate,
92               stime, pkt.trh2.starttime,
93               etime, pkt.trh2.endtime, pkt.trh2.quality[0], pkt.trh2.quality[1] );
94      } else {
95          fprintf( stdout, "%d %s %4d %.1f %s (%.4f) %s (%.4f) %c%c ",
96                         pkt.trh2.pinno, pkt.trh2.datatype, pkt.trh2.nsamp, pkt.trh2.samprate,
97                         stime, pkt.trh2.starttime,
98                         etime, pkt.trh2.endtime, pkt.trh2.quality[0], pkt.trh2.quality[1] );
99      }
100      fprintf(stdout, "\n");
101
102
103     /* Store pertinent info about this tracebuf message
104     **************************************************/
105     datalen  = byte_per_sample * nsamp;
106     totbytes = datalen + sizeof( TRACE2_HEADER );
107     
108     /* Skip over data samples
109     ************************/
110     fseek( ifp, datalen, SEEK_CUR );
111
112  } /* end while first time thru */
113
114  fclose( ifp );
115  return( 0 );
116}
Note: See TracBrowser for help on using the repository browser.