예제 #1
0
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;
}
예제 #2
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;
}
예제 #3
0
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;
}
예제 #4
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);
}
예제 #5
0
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(&ltmp, 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);
}