source: trunk/src/seismic_processing/hyp2000_mgr/arcfeeder.c @ 3170

Revision 10, 3.1 KB checked in by lucky, 21 years ago (diff)

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2/*
3 *   THIS FILE IS UNDER RCS - DO NOT MODIFY UNLESS YOU HAVE
4 *   CHECKED IT OUT USING THE COMMAND CHECKOUT.
5 *
6 *    $Id$
7 *
8 *    Revision history:
9 *     $Log$
10 *     Revision 1.1  2000/02/14 18:40:56  lucky
11 *     Initial revision
12 *
13 *
14 */
15
16/*
17 *  arcfeeder:  reads from stdin the names of single-event or
18 *              multiple-event archive files.  Reads one event
19 *              at a time from the archive file, pipes it to
20 *              command "hyp2000_mgr hyp2000_mgr.d ncal2000.hyp"
21 *
22 *  Example startup command:
23 *     ls *.arc | arcfeeder    (processes all .arc files in cwd)
24 */
25
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29#include <earthworm.h>
30
31main( int argc, char *argv[] )
32{
33   static char   msg[MAX_BYTES_PER_EQ];  /* message from arcfile   */
34   char          line[200];              /* one line at a time     */
35   char          fname[50];              /* archive file name      */
36   char          junk; 
37   int           n;                      /* working pointer to msg */
38   int           nline;
39   int           length;
40   int           endoffile;
41   FILE         *fparc;
42   unsigned char TypeHyp2000Arc;
43   unsigned char TypeKill;
44
45/* Spawn the next process
46 ************************/
47   if ( pipe_init( "hyp2000_mgr hyp2000_mgr.d ncal2000.hyp",
48        (unsigned long)0 ) == -1 )
49   {
50      printf( "arcfeeder: Error starting hyp2000_mgr; exiting!\n" );
51      exit ( -1 );
52   }
53   printf( "arcfeeder: piping output to hyp2000_mgr\n" );
54
55/* Look up message types in earthworm.h tables
56 *********************************************/
57   GetType( "TYPE_HYP2000ARC", &TypeHyp2000Arc );
58   GetType( "TYPE_KILL",   &TypeKill );
59
60/* Loop over all .arc file names fed to stdin
61 ********************************************/
62   while( scanf( "%s", fname ) != EOF )
63   {
64   /* Open next archive file
65    ************************/
66      if( (fparc=fopen( fname, "r")) == (FILE *) NULL ) 
67      {
68         printf( "arcfeeder: error opening file <%s>\n", fname );
69         continue;
70      }
71
72      endoffile = 0;
73      while( !endoffile )
74      {
75      /* Read next archive message from file
76       *************************************/
77         n=0;
78         nline = 0;
79         while( n < MAX_BYTES_PER_EQ-1 )
80         {
81            if( fscanf( fparc, "%[^\n]", line ) == EOF )  {
82                 endoffile = 1;
83                 break;
84            }
85            fscanf( fparc, "%c", &junk ); /*read newline*/
86            length = strlen(line);
87            strncpy( msg+n, line, length );
88            n += length;
89            msg[n++] = '\n';
90            nline++;
91            if( length<75 && line[0]=='$' && nline>2) 
92                break;      /*found terminator line*/
93         } 
94         msg[n] = '\0';
95         if( endoffile ) continue;
96         /*printf("Next event:\n%s", msg );*/ /*DEBUG*/
97
98   /* Send msg down pipe
99    ********************/
100         if ( pipe_put( msg, TypeHyp2000Arc ) != 0 )
101            printf( "arcfeeder: Error writing msg to pipe.\n"); 
102
103         sleep_ew(100);
104      }
105      fclose(fparc);
106   }
107
108   if ( pipe_put( "", TypeKill ) != 0 )
109       printf( "arcfeeder: Error writing kill msg to pipe.\n");
110
111   exit( 0 );
112}
Note: See TracBrowser for help on using the repository browser.