Exemple #1
0
void code_compare(FILE *file, RegDesc *registers, char *op, Symbol *result, Symbol *operand1, Symbol *operand2)
{
  debug("%s = %s %s %s", result->name, op, operand1->name, operand2->name); 

  int dest_reg = get_result_register(file, registers, operand1);
  int source_reg = get_argument_register(file, registers, operand2, dest_reg);

  debug("Code Compare Dest: %d Source: %d", dest_reg, source_reg);

  //Compare
  code_instruction(file, COMPARE, registers[source_reg].name, registers[dest_reg].name);
  //code_instruction(file, COMPARE, registers[dest_reg].name, registers[source_reg].name);

  //Get the low bytes
  char *low = make_low(registers[dest_reg].name);

  //Get the value
  code_instruction(file, op, low, NULL);

  //Now clear remaining bytes
  code_instruction(file, "movzbl", low, registers[dest_reg].name);

  //Update
  clear_register(registers, dest_reg);
  insert_register(registers, dest_reg, result, TRUE);
}
Exemple #2
0
void code_unary(FILE *file, RegDesc *registers, char *op, Symbol *result, Symbol *operand)
{
  int dest_reg = get_result_register(file, registers, operand);
  
  debug("Code Unary %s Dest: %d", op, dest_reg);
  
  code_instruction(file, op, registers[dest_reg].name, NULL);
  
  clear_register(registers, dest_reg);
  insert_register(registers, dest_reg, result, TRUE);
}
Exemple #3
0
// result = operand1 op operand2
void code_binary(FILE *file, RegDesc *registers, char *op, Symbol *result, Symbol *operand1, Symbol *operand2)
{
  int dest_reg;
  if ((strcmp(op, ATT_MOD) == 0) || (strcmp(op, MULTIPLY) == 0) || (strcmp(op, DIVIDE) == 0))
    {
      //Spill eax
      code_spill_reg(file, registers, REG_EAX);
      
      //Set destination
      dest_reg = REG_EAX;
      clear_register(registers, dest_reg);

      code_load_reg(file, registers, REG_EAX, operand1);
      insert_register(registers, dest_reg, operand1, FALSE);

      if ((strcmp(op, ATT_MOD) == 0) || (strcmp(op, DIVIDE) == 0))
	code_instruction(file, QUADWORD, NULL, NULL);
    }
  else
    {
      dest_reg = get_result_register(file, registers, operand1);
    }

  int source_reg = get_argument_register(file, registers, operand2, dest_reg);

  debug("Code Binary %s Dest: %d Source: %d", op, dest_reg, source_reg);

  if (strcmp(op, ATT_MOD) == 0)
    {
      code_instruction(file, DIVIDE, registers[source_reg].name, registers[dest_reg].name);
      clear_register(registers, REG_EDX);
      insert_register(registers, REG_EDX, result, TRUE);
    }
  else
    {
      code_instruction(file, op, registers[source_reg].name, registers[dest_reg].name);
      clear_register(registers, dest_reg);
      insert_register(registers, dest_reg, result, TRUE);
    }
}
int
main( int argc, char **argv )
{
	int	c;
	int	errflag = 0;
	int	orb;
	int	stop = 0;
	long	nrecs;
	char	*match = ".*/pf/st";
	char	*from = 0;
	char	*statefile = 0;
	char	*pfname = "orb2rrdc";
	char	*orbname;
	char	*dbcache;
	char	*rrdtool;
	char	command[STRSZ];
	char	net[STRSZ];
	char	sta[STRSZ];
	char	rrdvar[STRSZ];
	char	key[STRSZ];
	char	path[FILENAME_MAX];
	Dbptr	db;
	Dbptr	dbt;
	Pf	*pf;
	char	*Default_network;
	Tbl	*dlslines;
	Arr	*Dls_vars_dsparams;
	Arr	*Dls_vars_rras;
	Tbl	*Dls_vars_keys;
	char	*line;
	char	*dls_var;
	char	*dsparams;
	Tbl	*rras;
	int	i;
	int	j;
	OrbreapThr *ort;
	int	pktid;
	char	srcname[ORBSRCNAME_SIZE];
	double	time = 0;
	char	*packet = 0;
	int	nbytes = 0;
	int	bufsize = 0;
	Packet	*pkt = 0;
	int	rc;
	char	*s;
	Pf	*dlspf;
	Tbl	*dlspfkeys;
	char	*element;
	Tbl	*parts;
	double	val;
	Pf	*pfval = 0;

	elog_init( argc, argv );

	while( ( c = getopt( argc, argv, "vVd:s:p:m:f:" ) ) != -1 ) {

		switch( c ) {

		case 'd':
			CacheDaemon = optarg;
			break;

		case 'f':
			from = optarg;
			break;

		case 'm':
			match = optarg;
			break;

		case 'p': 
			pfname = optarg;
			break;

		case 's':
			statefile = optarg;
			break;
			
		case 'v':
			Verbose++;
			break;

		case 'V':
			VeryVerbose++;
			Verbose++;
			break;
		
		default:
			elog_complain( 0, "Unknown option '%c'\n", c );
			errflag++;
			break;
		}
	}

	if( errflag || argc - optind != 2 ) {

		usage();
	}

	if( Verbose ) {

		elog_notify( 0, "Starting at %s (%s $Revision$ $Date$)\n", 
				zepoch2str( str2epoch( "now" ), "%D %T %Z", "" ),
				Program_Name );
	}

	orbname = argv[optind++];
	dbcache = argv[optind++];

	pfread( pfname, &pf );

	rrdtool = pfget_string( pf, "rrdtool" );

	if( rrdtool == NULL || ! strcmp( rrdtool, "" ) ) {

		elog_die( 0, "Error: no rrdtool executable name specified in parameter file\n" );

	} else if( ( rrdtool[0] == '/' && ! is_present( rrdtool ) ) || ( rrdtool[0] != '/' && ! datafile( "PATH", rrdtool ) ) ) {

		elog_die( 0, "Error: can't find rrdtool executable by name of '%s' (check PATH environment " 
			"variable, or absolute path name if given)\n", rrdtool );

	} else if( rrdtool[0] == '/' ) {

		sprintf( command, "%s -", rrdtool );

	} else {

		sprintf( command, "rrdtool -" );
	}

	Suppress_egrep = pfget_string( pf, "suppress_egrep" );

	if( Suppress_egrep != NULL && strcmp( Suppress_egrep, "" ) ) {
		
		if( ! datafile( "PATH", "egrep" ) ) {

			elog_complain( 0, "Ignoring suppress_egrep parameter: can't find egrep on path\n" ); 

		} else {

			sprintf( command, "%s 2>&1 | egrep -v '%s'", command, Suppress_egrep );
		}
	}

	if( VeryVerbose ) {

		elog_notify( 0, "Executing command: %s\n", command );
	}

	Rrdfp = popen( command, "w" );

	if( Rrdfp == (FILE *) NULL ) {

		elog_die( 0, "Failed to open socket to rrdtool command\n" );
	}

	orb = orbopen( orbname, "r&" );

	if( orb < 0 ) {

		elog_die( 0, "Failed to open orb '%s' for reading. Bye.\n", orbname );
	}

	orbselect( orb, match );

	if( from != NULL && statefile == NULL ) {

		pktid = orbposition( orb, from );

		if( Verbose ) {

			elog_notify( 0, "Positioned to packet %d\n", pktid );
		}

	} else if( from != NULL ) {

		elog_complain( 0, "Ignoring -f in favor of existing state file\n" );
	}

	if( statefile != NULL ) {

		stop = 0;

		exhume( statefile, &stop, 15, 0 );

		orbresurrect( orb, &pktid, &time );

		if( Verbose ) {

			elog_notify( 0, "Resurrecting state to pktid %d, time %s\n",
				pktid, s = strtime( time ) );

			free( s );
		}

		orbseek( orb, pktid );
	}

	dbopen( dbcache, "r+", &db );

	if( db.database < 0 ) {
		
		elog_die( 0, "Failed to open cache database '%s'. Bye.\n", dbcache );

	} else {
		
		db = dblookup( db, "", "rrdcache", "", "" );

		if( db.table < 0 ) {

			elog_die( 0, "Failed to lookup 'rrdcache' table in '%s'. Bye.\n", dbcache );
		}
	}

	dbcrunch( db );

	dbt = dbsubset( db, "endtime == NULL", NULL );

	Rrd_files = newarr( 0 );

	dbquery( dbt, dbRECORD_COUNT, &nrecs );

	for( dbt.record = 0; dbt.record < nrecs; dbt.record++ ) {

		dbgetv( dbt, 0, "net", &net, "sta", &sta, "rrdvar", &rrdvar, NULL );

		dbfilename( dbt, (char *) &path );

		sprintf( key, "%s:%s:%s", net, sta, rrdvar );

		if( ! is_present( path ) ) {
			
			elog_complain( 0, "WARNING: rrd file '%s', listed in database, does not exist. "
				"Removing database entry.\n", path );

			dbmark( dbt );

		} else {

			setarr( Rrd_files, key, strdup( path ) );

			if( VeryVerbose ) {

				elog_notify( 0, "Re-using rrd file '%s' for '%s'\n", path, key );
			}
		}
	}

	Rrdfile_pattern = pfget_string( pf, "rrdfile_pattern" );
	Status_stepsize_sec = pfget_double( pf, "status_stepsize_sec" );
	Default_network = pfget_string( pf, "default_network" );
	dlslines = pfget_tbl( pf, "dls_vars" );

	Dls_vars_dsparams = newarr( 0 );
	Dls_vars_rras = newarr( 0 );

	for( i = 0; i < maxtbl( dlslines ); i++ ) {
		
		line = gettbl( dlslines, i );
		
		strtr( line, "\t", " " );
		rras = split( line, ' ' );

		dls_var = shifttbl( rras );
		dsparams = shifttbl( rras );

		setarr( Dls_vars_dsparams, dls_var, dsparams );
		setarr( Dls_vars_rras, dls_var, rras );
	}

	ort = orbreapthr_new( orb, -1., 0 );

	for( ; stop == 0; ) {

		orbreapthr_get( ort, &pktid, srcname, &time, &packet, &nbytes, &bufsize );

		if( statefile ) {

			rc = bury();

			if( rc < 0 ) {

				elog_complain( 0, "Unexpected failure of bury command! " 
					"(are there two orb2rrdc's running with the same state" 
					"file?)\n" );

				clear_register( 1 );
			}
		}

		rc = unstuffPkt( srcname, time, packet, nbytes, &pkt );

		if( rc == Pkt_pf ) {

			if( VeryVerbose ) {

				/* Parameter files generally too big for elog */

				fprintf( stderr, "Received a parameter-file '%s' at %s\n%s\n\n", 
						srcname, 
						s = strtime( time ), 
						pf2string( pkt->pf ) );

				free( s );

			} else if( Verbose ) {

				elog_notify( 0, "Received a parameter-file '%s' at %s\n", 
						srcname, s = strtime( time ) );

				free( s );
			}

			pfmorph( pkt->pf );

			if( VeryVerbose ) {

				fprintf( stderr, "Morphed parameter-file '%s' to interpret 'opt':\n%s\n\n", 
						srcname, 
						pf2string( pkt->pf ) );
			}

			pfget( pkt->pf, "dls", (void **) &dlspf );

			dlspfkeys = pfkeys( dlspf );
			Dls_vars_keys = keysarr( Dls_vars_dsparams );

			for( i = 0; i < maxtbl( dlspfkeys ); i++ ) {
			   
			   element = gettbl( dlspfkeys, i );

			   if( strcontains( element, "_", 0, 0, 0 ) ) {

				parts = split( (s = strdup( element )), '_' );

				sprintf( net, "%s", (char *) gettbl( parts, 0 ) );
				sprintf( sta, "%s", (char *) gettbl( parts, 1 ) );

				free( s );
				freetbl( parts, 0 );

			   } else {

				sprintf( net, "%s", Default_network );

				sprintf( sta, "%s", element );
			   }

			   for( j = 0; j < maxtbl( Dls_vars_keys ); j++ ) {

			   	dls_var = gettbl( Dls_vars_keys, j );

				sprintf( key, "%s{%s}", element, dls_var );

				if( pfresolve( dlspf, key, 0, &pfval ) < 0 ) {

					elog_complain( 0, "Unable to extract variable '%s' "
						"(not present or wrong type) from element '%s' "
						"in packet from '%s', timestamped '%s'; Skipping\n",
						key, element, srcname, s = strtime( time ) );

					free( s );

					pfval = 0;

					continue;

				} else if( pfval != (Pf *) NULL &&
					   pfval->value.s != (char *) NULL &&
					   ! strcmp( pfval->value.s, "-" ) ) {

					if( VeryVerbose ) {

						elog_notify( 0, "Non-floating point value '-' in variable '%s', "
							"in packet from '%s', timestamped '%s'; Skipping data point\n",
							key, srcname, s = strtime( time ) );

						free( s );
					}

					continue;

				} else {

					val = pfget_double( dlspf, key );
				}

				archive_dlsvar( db, net, sta, dls_var, 
						(char *) getarr( Dls_vars_dsparams, dls_var ),
						(Tbl *) getarr( Dls_vars_rras, dls_var ),
						time, val );
			   }

			}

			freetbl( dlspfkeys, 0 );
			freetbl( Dls_vars_keys, 0 );

		} else if( rc == Pkt_stash ) {

			; /* Do nothing */

		} else {

			if( Verbose ) {

				elog_notify( 0, "Received a packet that's not a parameter file " 
					"(type '%d' from unstuffPkt); skipping\n", rc );
			}
		}
	}
}
int grtr_sc_create(Dbptr dbsc, char *net_expr, char *sta_expr, 
        char *chan_expr, double tstart, double tend, char *gap,
        int calib, int ir, Dbptr *trscgr)
{
	char time_str[100];
	char endtime_str[100];
	int ret, n, n2, i;
	double time, time2, endtime, endtime2;
	char sta[32], chan[32];
	char sta2[32], chan2[32];
	char string[1024];
	char string2[64];
	int new_view = 0;
	int is, crunch;
	Response *resp;
	Dbptr db;

	/* Subset input view */

	strcpy (string, "");
	if (sta_expr) {
		strcpy (string, "( ");
        	sprintf (string2, "sta =~ /%s/", sta_expr);
        	strcat (string, string2);
	}
	if (chan_expr) {
		if (string[0]) strcat (string, " && ");
		else strcpy (string, "( ");
        	sprintf (string2, "chan =~ /%s/", chan_expr);
        	strcat (string, string2);
	}
	if (string[0]) {
		strcat (string, " )");
		dbsc = dbsubset (dbsc, string, 0);
		new_view = 1;
	}
        dbquery (dbsc, dbRECORD_COUNT, &n);
        if (n < 1) {
		register_error (0, "grtr_sc_create: No data to process.\n");
		if (new_view) dbfree (dbsc);
		return (-1);
        }

	/* Read in data */

	if (tstart == 0.0 && tend == 0.0) {
		dbquery (dbsc, dbRECORD_COUNT, &n);
		for (dbsc.record = 0; dbsc.record < n; dbsc.record++) {
			if (dbgetv (dbsc, 0, "time", &time, "endtime", &endtime, 0) == dbINVALID) {
        			register_error (0, "grtr_sc_create: dbgetv() error.\n");
				if (new_view) dbfree (dbsc);
        			return (-1);
			}
        		if (tstart == 0.0 && tend == 0.0) {
        			tstart = time;
        			tend = endtime;
			} else {
				if (time < tstart) tstart = time;
				if (endtime > tend) tend = endtime;
			}
		}
	}
        sprintf (time_str, "(%.5f)", tstart);
        sprintf (endtime_str, "(%.5f)", tend);
	dbsc.record = dbALL;
        ret = trload_css (dbsc, time_str, endtime_str, trscgr, "wfdisc", 0);

	/* Split, splice, apply calib */

	if (gap == NULL) strcpy (string, "seg");
	else strcpy (string, gap);
	if (!strcmp(string, "leave")) {
	} else if (!strcmp(string, "seg")) {
		trsplit (*trscgr, 0, 0);
		trsplice (*trscgr, 0.5, 0, 0);
	} else if (!strcmp(string, "interp")) {
		register_error (0, "grtr_sc_create: gap value '%s' not implemented yet.\n", string);
		if (new_view) dbfree (dbsc);
		return (-1);
	} else if (!strcmp(string, "zero")) {
		register_error (0, "grtr_sc_create: gap value '%s' not implemented yet.\n", string);
		if (new_view) dbfree (dbsc);
		return (-1);
	} else if (!strcmp(string, "drop")) {
		trsplit (*trscgr, 0, 0);
		trsplice (*trscgr, 0.5, 0, 0);
		crunch = 0;
		dbquery (*trscgr, dbRECORD_COUNT, &n);
		strcpy (sta2, "");
		strcpy (chan2, "");
		n2 = 0;
		db = *trscgr;
		for (trscgr->record=0; trscgr->record<n; (trscgr->record)++) {
			if (dbgetv (*trscgr, 0, "sta", sta, "chan", chan,
					0) == dbINVALID) {
        			register_error (0, "grtr_sc_create: dbgetv() error.\n");
				if (new_view) dbfree (dbsc);
        			return (-1);
			}
			if (strcmp(sta, sta2) || strcmp(chan, chan2)) {
				if (n2 > 1) {
        				for (db.record = is; db.record < is+n2; db.record++) {
        					trfree (db);
        					crunch = 1;
        				}
				}
				n2 = 1;
				is = trscgr->record;
				strcpy (sta2, sta);
				strcpy (chan2, chan);
				continue;
        		}
        		n2++;
		}
		if (n2 > 1) {
       			for (db.record = is; db.record < is+n2; db.record++) {
       				trfree (db);
       				crunch = 1;
       			}
		}
		if (crunch) {
			dbcrunch (db);
		}
	} else {
		register_error (0, "grtr_sc_create: Illegal gap value '%s'.\n", string);
		if (new_view) dbfree (dbsc);
		return (-1);
	}
	if (calib) trapply_calib (*trscgr);

	/* Read in instrument responses. */

	if (ir )
	{
	/* Run this section if instrument response is to be loaded */
	    dbsc.record = 0;
	    if (dbgetv (dbsc, 0, "instrument.inid", &i, 0) != dbINVALID && i >= 0) {
		dbquery (*trscgr, dbRECORD_COUNT, &n);
		dbquery (dbsc, dbRECORD_COUNT, &n2);
		for (trscgr->record=0; trscgr->record<n; (trscgr->record)++) {
			if (dbgetv (*trscgr, 0, "sta", sta, "chan", chan,
					"time", &time, 0) == dbINVALID) {
        			register_error (0, "grtr_sc_create: dbgetv() error.\n");
				if (new_view) dbfree (dbsc);
        			return (-1);
			}
			for (dbsc.record=0; dbsc.record<n2; dbsc.record++) {
				if (dbgetv (dbsc, 0, "sta", sta2, "chan", chan2,
					"time", &time2, "endtime", &endtime2, 0) == dbINVALID) {
        				register_error (0, "grtr_sc_create: dbgetv() error.\n");
					if (new_view) dbfree (dbsc);
        				return (-1);
				}
				if (strcmp(sta, sta2)) continue;
				if (strcmp(chan, chan2)) continue;
				if (time < time2) continue;
				if (time >= endtime2) continue;
				dbextfile (dbsc, "instrument", string);
				resp = (Response *) getarr (resp_arr, string);
				dbputv (*trscgr, 0, "response", resp, 0);
				break;
			}
		}
	    }
	}
	clear_register (0);
	if (new_view) dbfree (dbsc);

	/* Normal exit. */

	return (0);
}
Trace *
read_trace (Dbptr db, double tstart, double tend)

{
    char fname[1024];
    char dtype[8];
    char segtype[8];
    long foff, nsamp;
    void *data;
    Trace *trace;
    double time, samprate;
    double calib, calper;
    double ts, te;
    int size;
    int i, ret;

    if (dbextfile (db, "wfdisc", fname) < 1) {
        fprintf (stderr, "read_trace: Unable to find input file '%s'\n",
                 fname);
        return (NULL);
    }
    dbgetv (db, 0, "time", &time, "samprate", &samprate,
            "nsamp", &nsamp, "datatype", dtype,
            "segtype", segtype, "foff", &foff,
            "calib", &calib, "calper", &calper, NULL);

    data = NULL;
    ret = trgetwf (db, NULL, (Trsample **) &data, 0, tstart, tend,
                   &ts, &te, &nsamp, 0, 0);
    size = 4;

    switch (ret) {
    default:
    case 0:
        if (ret < 0) data = NULL;
        if (ts == 0.0 && te == 0.0) data = NULL;
        break;

    case -9: /* no data */
        clear_register (0);
        data = NULL;
        break;

    case -1:
    case -2:
    case -3:
    case -5:
    case -6:
    case -7:
    case -8:
        complain (0,
                  "read_trace: trgetwf() error.\n");
        return (NULL);
    }

    if (data == (void *) -1) {
        data = NULL;
    }

    if (data == (void *) -2) {
        clear_register (0);
        data = NULL;
    }
    trace = newtrace();
    if (trace == NULL) {
        fprintf (stderr, "read_trace: newtrace() error.\n");
        my_free (data);
        return (NULL);
    }
    trace->scv = NULL;
    trace->tstart = ts;
    trace->dt = 1.0/samprate;
    trace->nsamps = nsamp;
    trace->calib = calib;
    trace->calper = calper;
    strcpy (trace->rawdata_format, "t4");
    strcpy (trace->rawdata_type, segtype);
    strcpy (trace->input_units, "");
    strcpy (trace->output_units, "");
    trace->data = NULL;
    trace->data_free = NULL;
    trace->data_malloc = 0;
    trace->raw_data = data;
    trace->rawdata_free = data;
    if (data) trace->rawdata_malloc = nsamp*size;
    else trace->rawdata_malloc = 0;
    trace->prev = NULL;
    trace->next = NULL;
    for (i=0; i<trace->nsamps; i++) if (((float *)data)[i] < 0.9e30) break;
    if (i >= trace->nsamps) {
        trace->nsamps = 0;
        trace->raw_data = NULL;
        trace->rawdata_free = NULL;
        free (data);
    } else {
        if (data) {
            trace = (Trace *) SCV_trace_fixgaps (trace, "segment");
        }
    }
    return (trace);
}
Exemple #7
0
main ( int argc, char **argv )

{
	char orbname[20]="zagsun6";
	int orb;
	tstations_struc stations ;
	char name[5] = "ORB" ;
	char sname[5] = "Q003" ;
	short int data_mask = CSIM_DATA ;
	pclient_struc client ;
	pclient_station station ;
	pdata_user data ;
	boolean alert_flag ;
	int ret ;
	int i, j ;
	Steim *blockette;
	int *sdata, npts;
	PktChannel pktchan;
	unsigned short int quality = 0;
	unsigned short int pinno = 0;
	char *packet = NULL;
	int nbytes = 0;
	int bufsiz = 0;
	char srcname[256];
	int fix_MOTA=0;
	int fix_WATA=0;
	int fix_SQTA=0;
	/*
	double fouryears=epoch(2004000)-epoch(1996000);
	double eightyears=epoch(2004000)-epoch(1996000);
	double twelveyears=epoch(2008000)-epoch(1996000);
	double twentyyears=epoch(2016000)-epoch(1996000);
	  */
	double sixteenyears=epoch(2012000)-epoch(1996000);
    Pf *mypf;


	/* Niko, leap second July 2012 */
	/* subtract another second for the leap-second 2006-01-01 */
	/* no more... Udo corrected the time again...
	eightyears -= 1;
	sixteenyears -= 1.0;
	*/
	/*schaltsekunde 2009-01-01*/
	/*double twokohnine=epoch(2009001); */

	elog_init ( argc, argv ) ;

	if (argc < 2) {
		usage();
		exit (1);
	}
	/*strcpy(orbname,"zagsun6");*/
	/*orbname = argv[2];*/
	strncpy (sname, argv[1], 4);
	sname[4] = '\0';
	for (argc-=3,argv+=3; argc>0; argc--,argv++) {
		if (!strcmp(*argv, "-v")) {
			verbose = 1;
		} else {
			fprintf (stderr, "cs2orb: Unrecognized option '%s'.\n", *argv);
			usage();
			exit (1);
		}
	}

putenv("PFPATH=/home/comserv/pf");
    if ( pfread ( "cs2orb", &mypf ) != 0 ) 
                die ( 1, "Can't read parameter file\n" ) ; 
    fix_MOTA=pfget_int(mypf,"MOTA");
    fix_WATA=pfget_int(mypf,"WATA");
    fix_SQTA=pfget_int(mypf,"SQTA");

	/* orb setup stuff */

	orb = orbopen (orbname, "w&");
	if (orb < 0) {
		clear_register (1);
		fprintf (stderr, "cs2orb: orbopen() error for '%s'.\n", orbname);
		exit (1);
	}

	/* comserv setup stuff */

	cs_setup (&stations, name, sname, TRUE, TRUE, 10, 5, data_mask , 6000) ;
	client = cs_gen ( &stations ) ;

	/* Trace setup stuff */

	blockette = newsteim();
	blockette->record_size = 512 ;

	/* Data packet read loop */

	while (1) {
		/* Look for a packet */
		ret = cs_scan ( client , &alert_flag ) ;

		/* Sleep and loop if nothing there */
		if (ret == -1) { sleep (1); continue; }

		/* Grab the station structure pointer */
		station = (pclient_station) ((long int) client + client->offsets[ret]) ;

		/* Printout station status */
		if (alert_flag) {
			complain (0, "Station %4s status: %s\n", long_str(station->name.l), &(stats[station->status])) ;
		}

		/* Sleep and loop if no valid data */
		if (!(station->valdbuf)) { sleep (1); continue; }

		/* Grab the data buffer pointer */
		data = (pdata_user) ((long int) client + station->dbufoffset) ;

		/* Loop over number of data buffers */
		for (i=0; i<station->valdbuf; i++,data=(pdata_user) ((long int)data + station->dbufsize)) {

			/* Set data blockette record */
			blockette->record = (pvoid) &(data->data_bytes) ;

			/* Parse the SEED header */
			if ( parse_seed_data_header( blockette ) ) {
				complain ( 0, "Problems parsing SEED header or 1000 blockette.\n" ) ;
				continue ;
			}
			/* niko netzname at fuer antelope */
			strcpy (blockette->sdh.net,"OE");
			
			sprintf (srcname, "%s_%s_%s", blockette->sdh.net, blockette->sdh.sta, blockette->sdh.chan);
			if (verbose) printf ("%s:", srcname);

			/* Not a data packet */
			if (!(blockette->sdh.nsamp) || !(blockette->sdh.samprate_factor)) {
				if (verbose) printf (" No data\n");
				continue;
			}

			if (verbose) printf ("%s", strtime(blockette->sdh.epoch));

			/* Uncompress the data */
			if ( usteim (blockette, &sdata, &npts) ) {
				clear_register (1);
				continue;
			}

			if (verbose) {
				for (j=0; j<10; j++) printf (" %5d", sdata[j]);
				printf ("\n");
			}

			/* Stuff packet for orb */
			strcpy (pktchan.net, blockette->sdh.net);
			
			strcpy (pktchan.sta, blockette->sdh.sta);
			strcpy (pktchan.chan, blockette->sdh.chan);
			/* pktchan.time = blockette->sdh.epoch+eightyears; 
			pktchan.time = blockette->sdh.epoch+twelveyears; */
			pktchan.time = blockette->sdh.epoch+sixteenyears;
			/*pktchan.time = blockette->sdh.epoch+twentyyears;*/
			pktchan.samprate = blockette->sdh.samprate;
			switch (pktchan.chan[0]) {
				case 'H':	pktchan.calib = 1.589446;
						break;
				/*
				case 'E':	pktchan.calib = 0.06/0.707;
				changed to 0.257 (~0.36*0.707)
				*/
				case 'E':	pktchan.calib = 0.257;		
				/* 
				incl. dämpfung -> stimmt wenn antelope diesen wert mit TF multipl.
				*/
						break;
				default:	pktchan.calib = 1.0;
						break;
			}
			
			if (!strcmp(pktchan.sta,"GAGA")) {
				/*Uhrenkorrektur template  */
				pktchan.time -= 1.0;
			}
			if (!strcmp(pktchan.sta,"no-MOTA")) {
				/*Uhrenkorrektur MOTA  */
				pktchan.time -= 1.0;
			}
			if ( fix_MOTA != 0 && !strcmp(pktchan.sta,"MOTA")) {
				/*Uhrenkorrektur MOTA  */
				pktchan.time += (double)(fix_MOTA);
			}
			if (fix_SQTA != 0 && !strcmp(pktchan.sta,"SQTA")) {
				/*Uhrenkorrektur SQTA  */
				pktchan.time += (double)(fix_SQTA);
			}
			if ( fix_WATA !=0 && !strcmp(pktchan.sta,"WATA")) {
				/*Uhrenkorrektur WATA  */
				pktchan.time += (double)(fix_WATA);
			}
			/* solve the problem with omitted segtype, which chops the db */
			if (!strcmp(pktchan.sta,"OBKA")) {
				switch (pktchan.chan[1]) {
					case 'H':	strcpy(pktchan.segtype,"V");
						break;
					case 'L':	strcpy(pktchan.segtype,"A");
						break;
					default:	;
						break;
				}
				
			}
			/* pktchan.calib = 1.0; */
			pktchan.nsamp = blockette->sdh.nsamp;
			pktchan.data = sdata;
			pktchan.nbytes = 4*pktchan.nsamp;
			pktchan.datatype = trINT;
			if (!stuff_iwc_tracebuf ( quality, pinno, &pktchan, &packet, &nbytes, &bufsiz ) ) {
				complain (0, "stuff_iwc_tracebuf error.\n");
				exit (1);
			}

			/* Put to orb */
			if ( orbput ( orb, srcname, pktchan.time, packet, nbytes ) ) {
				complain (0, "orbput error.\n");
				exit (1);
			}
			orbflush (orb);
		}
	}
}