int seed_b1000(struct seed_b1000 *dest, char *src) { int swap; short type; assert(sizeof(short) == 2); memcpy(&type, src, 2); if (type == 1000) { swap = 0; } else { util_sswap(&type, 1); if (type == 1000) { swap = 1; } else { return -1; } } memcpy(&dest->next, src + 2, 2); if (swap) util_sswap(&dest->next, 1); memcpy(&dest->format, src + 4, 1); memcpy(&dest->order, src + 5, 1); memcpy(&dest->length, src + 6, 1); return 0; }
int seed_type(char *src, long *next_ptr, int swap) { UINT8 *ptr; short type, next; assert(sizeof(short) == 2); memcpy(&type, src, 2); if (swap) util_sswap(&type, 1); memcpy(&next, src + 2, 2); if (swap) util_sswap(&next, 1); *next_ptr = next; return type; }
int seed_fsdh(struct seed_fsdh *dest, char *src) { int swap; char tbuff[10]; assert(sizeof(short) == 2); assert(sizeof(long) == 4); sscanf(src, "%06dD ", &dest->seqno); memcpy(dest->staid, src+ 8, 5); dest->staid[5] = 0; util_strtrm(dest->staid); memcpy(dest->locid, src+13, 2); dest->locid[2] = 0; util_strtrm(dest->locid); memcpy(dest->chnid, src+15, 3); dest->chnid[3] = 0; util_strtrm(dest->chnid); memcpy(dest->netid, src+18, 2); dest->netid[2] = 0; util_strtrm(dest->netid); dest->start = seed_ttodt(src+20, &dest->order); memcpy(&dest->nsamp, src+30, 2); memcpy(&dest->srfact, src+32, 2); memcpy(&dest->srmult, src+34, 2); memcpy(&dest->active, src+36, 1); memcpy(&dest->ioclck, src+37, 1); memcpy(&dest->qual, src+38, 1); memcpy(&dest->more, src+39, 1); memcpy(&dest->tcorr, src+40, 4); memcpy(&dest->bod, src+44, 2); memcpy(&dest->first, src+46, 2); if (dest->swap = (dest->order != util_order())) { util_sswap(&dest->nsamp, 1); util_sswap(&dest->srfact, 1); util_sswap(&dest->srmult, 1); util_lswap(&dest->tcorr, 1); util_sswap(&dest->bod, 1); util_sswap(&dest->first, 1); } return 0; }
void seed_load1000(char *dest, struct seed_b1000 *src, unsigned long order) { int swap; short type = 1000, stmp; char unused = 0; swap = (order != util_order()); assert(sizeof(short) == 2); stmp = type; if (swap) util_sswap(&stmp, 1); memcpy(dest, &stmp, 2); stmp = src->next; if (swap) util_sswap(&stmp, 1); memcpy(dest + 2, &stmp, 2); memcpy(dest + 4, &src->format, 1); memcpy(dest + 5, &src->order, 1); memcpy(dest + 6, &src->length, 1); memcpy(dest + 7, &unused, 1); }
void seed_loadfsdh(char *dest, struct seed_fsdh *src, u_long order) { int swap; short stmp; long ltmp; char tbuff[10]; static char *fid = "seed_loadfsdh"; assert(sizeof(short) == 2); assert(sizeof(long) == 4); if (src->seqno < 0 || src->seqno > 999999) src->seqno = 1; /* The front is all ASCII stuff... no swapping required */ sprintf(dest , "%06dD ", src->seqno); sprintf(dest+ 8, "%s", src->staid); sprintf(dest+13, "%s", src->locid); sprintf(dest+15, "%s", src->chnid); sprintf(dest+18, "%s", src->netid); /* Time stamp is byte swapped internally (if required) */ seed_dtconv(dest+20, src->start, order); /* Byte swap the remaining stuff into the desired order, if required */ /* Numer of samples */ stmp = src->nsamp; if (swap) util_sswap(&stmp, 1); memcpy(dest+30, &stmp, 2); /* sample rate factor */ stmp = src->srfact; if (swap) util_sswap(&stmp, 1); memcpy(dest+32, &stmp, 2); /* sample rate multipler */ stmp = src->srmult; if (swap) util_sswap(&stmp, 1); memcpy(dest+34, &stmp, 2); /* Activity flags */ memcpy(dest+36, &src->active, 1); /* I/O and clock flags */ memcpy(dest+37, &src->ioclck, 1); /* Data quality flags */ memcpy(dest+38, &src->qual, 1); /* Number of blockettes that follow */ memcpy(dest+39, &src->more, 1); /* Time correction */ ltmp = src->tcorr; if (swap) util_lswap(<mp, 1); memcpy(dest+40, &src->tcorr, 4); /* Begining of data */ stmp = src->bod; if (swap) util_sswap(&stmp, 1); memcpy(dest+44, &stmp, 2); /* First blockette */ stmp = src->first; if (swap) util_sswap(&stmp, 1); memcpy(dest+46, &stmp, 2); }