Example #1
0
static long readData (dbCommon *record, format_t *format)
{
    scalcoutRecord *sco = (scalcoutRecord *) record;

    switch (format->type)
    {
        case DBF_DOUBLE:
        {
            return streamScanf (record, format, &sco->val);
        }
        case DBF_LONG:
        case DBF_ENUM:
        {
            long lval;

            if (streamScanf (record, format, &lval)) return ERROR;
            sco->val = lval;
            return OK;
        }
        case DBF_STRING:
        {
            return (streamScanfN (record, format,
                sco->sval, sizeof(sco->val)));
        }
    }
    return ERROR;
}
static long readData (dbCommon *record, format_t *format)
{
    stringinRecord *si = (stringinRecord *) record;

    if (format->type == DBF_STRING)
    {
        return streamScanfN (record, format, si->val, sizeof(si->val));
    }
    return ERROR;
}
Example #3
0
static long readData (dbCommon *record, format_t *format)
{
    mbboRecord *mbbo = (mbboRecord *) record;
    long val;
    int i;

    switch (format->type)
    {
        case DBF_LONG:
        {
            if (streamScanf (record, format, &val)) return ERROR;
            /* read VAL or RBV? Look if any value is defined */
            if (mbbo->sdef) for (i=0; i<16; i++)
            {
                if ((&mbbo->zrvl)[i])
                {
                    if (mbbo->mask) val &= mbbo->mask;
                    mbbo->rbv = val;
                    if (INIT_RUN) mbbo->rval = val;
                    return OK;
                }
            }
            mbbo->val = (short)val;
            return DO_NOT_CONVERT;
        }
        case DBF_ENUM:
        {
            if (streamScanf (record, format, &val)) return ERROR;
            mbbo->val = (short)val;
            return DO_NOT_CONVERT;
        }
        case DBF_STRING:
        {
            char buffer[sizeof(mbbo->zrst)];
            if (streamScanfN (record, format, buffer, sizeof(buffer)))
                return ERROR;
            for (val = 0; val < 16; val++)
            {
                if (strcmp ((&mbbo->zrst)[val], buffer) == 0)
                {
                    mbbo->val = (short)val;
                    return DO_NOT_CONVERT;
                }
            }
        }
    }
    return ERROR;
}
static long readData(dbCommon *record, format_t *format)
{
    lsiRecord *lsi = (lsiRecord *)record;
    ssize_t length;

    if (format->type != DBF_STRING) return ERROR;
    if ((length = streamScanfN(record, format, lsi->val, (long)lsi->sizv)) == ERROR)
    {
        return ERROR;
    }
    if (length < (ssize_t)lsi->sizv)
    {
        lsi->val[length] = 0;
    }
    lsi->len = length;
    return OK;
}
static long readData(dbCommon *record, format_t *format)
{
    biRecord *bi = (biRecord *)record;
    unsigned long val;

    switch (format->type)
    {
        case DBF_ULONG:
        case DBF_LONG:
        {
            if (streamScanf(record, format, &val) == ERROR) return ERROR;
            if (bi->mask) val &= bi->mask;
            bi->rval = val;
            return OK;
        }
        case DBF_ENUM:
        {
            if (streamScanf(record, format, &val) == ERROR) return ERROR;
            bi->val = (val != 0);
            return DO_NOT_CONVERT;
        }
        case DBF_STRING:
        {
            char buffer[sizeof(bi->znam)];
            if (streamScanfN(record, format, buffer, sizeof(buffer)) == ERROR)
                return ERROR;
            if (strcmp (bi->znam, buffer) == 0)
            {
                bi->val = 0;
                return DO_NOT_CONVERT;
            }
            if (strcmp (bi->onam, buffer) == 0)
            {
                bi->val = 1;
                return DO_NOT_CONVERT;
            }
        }
    }
    return ERROR;
}
static long readData (dbCommon *record, format_t *format)
{
    waveformRecord *wf = (waveformRecord *) record;
    double dval;
    long lval;

    wf->rarm = 0;
    for (wf->nord = 0; wf->nord < wf->nelm; wf->nord++)
    {
        switch (format->type)
        {
            case DBF_DOUBLE:
            {
                if (streamScanf (record, format, &dval) != OK)
                {
                    return wf->nord ? OK : ERROR;
                }
                switch (wf->ftvl)
                {
                    case DBF_DOUBLE:
                        ((epicsFloat64 *)wf->bptr)[wf->nord] = (epicsFloat64)dval;
                        break;
                    case DBF_FLOAT:
                        ((epicsFloat32 *)wf->bptr)[wf->nord] = (epicsFloat32)dval;
                        break;
                    default:
                        errlogSevPrintf (errlogFatal,
                            "readData %s: can't convert from double to %s\n",
                            record->name, pamapdbfType[wf->ftvl].strvalue);
                        return ERROR;
                }
                break;
            }
            case DBF_LONG:
            case DBF_ENUM:
            {
                if (streamScanf (record, format, &lval) != OK)
                {
                    return wf->nord ? OK : ERROR;
                }
                switch (wf->ftvl)
                {
                    case DBF_DOUBLE:
                        ((epicsFloat64 *)wf->bptr)[wf->nord] = (epicsFloat64)lval;
                        break;
                    case DBF_FLOAT:
                        ((epicsFloat32 *)wf->bptr)[wf->nord] = (epicsFloat32)lval;
                        break;
                    case DBF_LONG:
                    case DBF_ULONG:
                        ((epicsInt32 *)wf->bptr)[wf->nord] = (epicsInt32)lval;
                        break;
                    case DBF_SHORT:
                    case DBF_USHORT:
                    case DBF_ENUM:
                        ((epicsInt16 *)wf->bptr)[wf->nord] = (epicsInt16)lval;
                        break;
                    case DBF_CHAR:
                    case DBF_UCHAR:
                        ((epicsInt8 *)wf->bptr)[wf->nord] = (epicsInt8)lval;
                        break;
                    default:
                        errlogSevPrintf (errlogFatal,
                            "readData %s: can't convert from long to %s\n",
                            record->name, pamapdbfType[wf->ftvl].strvalue);
                        return ERROR;
                }
                break;
            }
            case DBF_STRING:
            {
                switch (wf->ftvl)
                {
                    case DBF_STRING:
                        if (streamScanfN (record, format,
                            (char *)wf->bptr + wf->nord * MAX_STRING_SIZE,
                            MAX_STRING_SIZE) != OK)
                        {
                            return wf->nord ? OK : ERROR;
                        }
                        break;
                    case DBF_CHAR:
                    case DBF_UCHAR:
                        memset (wf->bptr, 0, wf->nelm);
                        wf->nord = 0;
                        if (streamScanfN (record, format,
                            (char *)wf->bptr, wf->nelm) != OK)
                        {
                            return ERROR;
                        }
                        ((char*)wf->bptr)[wf->nelm] = 0;
                        for (lval = wf->nelm;
                            lval >= 0 && ((char*)wf->bptr)[lval] == 0;
                            lval--);
                        wf->nord = lval+1;
                        return OK;
                    default:
                        errlogSevPrintf (errlogFatal,
                            "readData %s: can't convert from string to %s\n",
                            record->name, pamapdbfType[wf->ftvl].strvalue);
                        return ERROR;
                }
                break;
            }
            default:
            {
                errlogSevPrintf (errlogMajor,
                    "readData %s: can't convert from %s to %s\n",
                    record->name, pamapdbfType[format->type].strvalue,
                    pamapdbfType[wf->ftvl].strvalue);
                return ERROR;
            }
        }
    }
    return OK;
}