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); }
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); }
// 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); }
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); } } }