1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 <2018> 2019 2020 2021 2022 2023 2024 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 <2018> 2019 2020 2021 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Stream device does not recognize a custom record type |
From: | "Abdalla Ahmad" <[email protected]> |
To: | "[email protected]" <[email protected]> |
Date: | Sun, 30 Sep 2018 12:41:59 +0000 |
Hi One of our IOC servers currently has the following setup: OS: SL 6.4 32-bit EPICS: 3.15.5 (previously 3.14.12.3) synApps built from assemble_synApps script (previously 5.6) Stream device R2-7-7a (Previously 2-5-1) This IOC has some records that use a custom record called "mbbi2" which was created here at SESAME by an engineer used to work here. The purpose of this record is to provide alarm
severity for each bit of the standard mbbiDirect, otherwise they are the same. The problem is integrating this record with the stream device driver. What we found after searching the synApps 5.6 setup:
1.
Adding MBBI2 definition to the stream device configure/RELEASE.
2.
Including mbbi2.dbd and mbbi library in streamApp/Makefile.
3.
Having mbbi2Record.h and devmbbiStream.c sources in the StreamDevice/src
4.
Adding mbbi2 to RECORDS in StreamDevice/src/CONFIG_STREAM That's all under base 3.14.12.3, we are not sure if something else is missing under 3.15.5 setup. With all these steps, the new stream device driver compiles with mbbi2 definitions
(dbd file, ldd command), but when running the IOC it immediately crashes with segmentation fault. I enabled core dumps, loaded the core dump into gdb, backtrace it and I got this Core was generated by `./bin/linux-x86/ioc iocBoot/ioc/st.cmd'. Program terminated with signal 11, Segmentation fault. #0 cvt_st_us (from=0xb <Address 0xb out of bounds>, to=0x87f9354, paddr=0x0) at ../../../src/ioc/db/dbFastLinkConv.c:161 161 if (*from == 0) { Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6_4.5.i686 libgcc-4.4.7-3.el6.i686 libstdc++-4.4.7-3.el6.i686 ncurses-libs-5.7-3.20090208.el6.i686
net-snmp-libs-5.5-44.el6_4.4.i686 openssl-1.0.0-27.el6_4.2.i686 pcre-7.8-6.el6.i686 readline-6.0-4.el6.i686 zlib-1.2.3-29.el6.i686 (gdb) backtrace #0 cvt_st_us (from=0xb <Address 0xb out of bounds>, to=0x87f9354, paddr=0x0) at ../../../src/ioc/db/dbFastLinkConv.c:161 #1 0x00848d0f in dbConstLoadLink (plink=0x87f9338, dbrType=4, pbuffer=0x87f9354) at ../../../src/ioc/db/dbLink.c:108 #2 dbLoadLink (plink=0x87f9338, dbrType=4, pbuffer=0x87f9354) at ../../../src/ioc/db/dbLink.c:475 #3 0x008556fc in recGblInitConstantLink (plink=0x87f9338, dbftype=4, pdest=0x87f9354) at ../../../src/ioc/db/recGbl.c:167 #4 0x006c14f8 in init_record (prec=0x87f91c0, pass=1) at ../mbbi2Record.c:153 #5 0x008719c7 in doInitRecord1 () at ../../../src/ioc/misc/iocInit.c:543 #6 iterateRecords () at ../../../src/ioc/misc/iocInit.c:472 #7 initDatabase () at ../../../src/ioc/misc/iocInit.c:551 #8 iocBuild_2 () at ../../../src/ioc/misc/iocInit.c:148 #9 0x00871c0a in iocBuild () at ../../../src/ioc/misc/iocInit.c:187 #10 0x00871c77 in iocInit () at ../../../src/ioc/misc/iocInit.c:99 #11 0x008723f7 in iocInitCallFunc (args=0x878ba80) at ../../../src/ioc/misc/miscIocRegister.c:25 #12 0x00a11271 in iocshBody (pathname=<value optimized out>, commandLine=0x0, macros=0x0) at ../../../src/libCom/iocsh/iocsh.cpp:815 #13 0x00a11a25 in iocsh (pathname=0xbfe125f0 "iocBoot/ioc/st.cmd") at ../../../src/libCom/iocsh/iocsh.cpp:883 #14 0x0804c97d in main (argc=2, argv=0xbfe10514) at ../iocMain.cpp:17 The IOC was complaining about DTYP and BFST fields which it cannot set their values, we looked up the mbbi2.dbd and found out deprecated values for the promotgroup. We are not sure
if this is the problem or not but we changed all promotegroup to the new values found in base 3.15.5 app developer guide, the IOC accepted the DTYP field but still unable to set . Still facing the same segmentation fault with the same backtrace. Here is an example mbbi2 record: record(mbbi2, "$(SYSTEM):getStatusWord") { field(DESC, "Reads status word") field(SCAN, "2 second") field(DTYP, "stream") field(INP, "@work-microwave-ssx.proto getStatusWord $(CONTROLLER)") field(VAL, "0") field(PINI, "YES") field(B0ST, "Standby mode") field(B0ZSV, "NO_ALARM") field(B0OSV, "NO_ALARM") field(B1ST, "PLO PLL") field(B1ZSV, "NO_ALARM") field(B1OSV, "MINOR") field(B2ST, "Reference PLL") field(B2ZSV, "NO_ALARM") field(B2OSV, "MAJOR") field(B3ST, "Reference PLL") field(B3ZSV, "NO_ALARM") field(B3OSV, "MINOR") field(B4ST, "Level Control") field(B4ZSV, "NO_ALARM") field(B4OSV, "NO_ALARM") field(B5ST, "MW") field(B5ZSV, "NO_ALARM") field(B5OSV, "MINOR") field(B6ST, "OCXO/TCXO") field(B6ZSV, "NO_ALARM") field(B6OSV, "NO_ALARM") field(B7ST, "RF OFF") field(B7ZSV, "NO_ALARM") field(B7OSV, "NO_ALARM") field(B8ST, "Oven status (OCXO)") field(B8ZSV, "NO_ALARM") field(B8OSV, "NO_ALARM") field(B9ST, "Main synthesizer") field(B9ZSV, "NO_ALARM") field(B9OSV, "MAJOR") field(BAST, "VHF synthesizer") field(BAZSV, "NO_ALARM") field(BAOSV, "MAJOR") field(BBST, "Fine synthesizer") field(BBZSV, "NO_ALARM") field(BBOSV, "MAJOR") field(BCST, "DBLR-Status (SSX-3)") field(BCZSV, "NO_ALARM") field(BCOSV, "MAJOR") field(BDST, "Summarized alarm") field(BDZSV, "NO_ALARM") field(BDOSV, "MAJOR") field(BEST, "Reference-PLL") field(BEZSV, "NO_ALARM") field(BEOSV, "MAJOR") field(BFST, "MW PLL") field(BFZSV, "NO_ALARM") field(BFOSV, "MAJOR") } Sorry for any misinformation, all our findings were the result of comparing between the two EPICS bases and the two synApps collections. Attached is the record's source code stream
device interface files. Best Regards, Abdalla Ahmad Control Engineer SESAME Allan, Jordan. Tel: (+962-5) 3511348 , ext. 265 Fax: (+962-5) 3511423 Mob: (+962-7)88183296 |
Attachment:
mbbi2.tar.gz
Description: mbbi2.tar.gz
/*************************************************************** * StreamDevice record interface for * * multibit binary input direct records * * * * (C) 1999 Dirk Zimoch ([email protected]) * * (C) 2005 Dirk Zimoch ([email protected]) * * * * This is an EPICS record Interface for StreamDevice. * * Please refer to the HTML files in ../doc/ for a detailed * * documentation. * * * * If you do any changes in this file, you are not allowed to * * redistribute it any more. If there is a bug or a missing * * feature, send me an email and/or your patch. If I accept * * your changes, they will go to the next release. * * * * DISCLAIMER: If this software breaks something or harms * * someone, it's your problem. * * * ***************************************************************/ #include "devStream.h" #include <mbbi2Record.h> #include <epicsExport.h> static long readData (dbCommon *record, format_t *format) { mbbi2Record *mbbiD = (mbbi2Record *) record; long val; if (format->type == DBF_LONG) { if (streamScanf (record, format, &val)) return ERROR; if (mbbiD->mask) { val &= mbbiD->mask; mbbiD->rval = val; return OK; } else { /* No MASK, (NOBT = 0): use VAL field */ mbbiD->val = (short)val; return DO_NOT_CONVERT; } } return ERROR; } static long writeData (dbCommon *record, format_t *format) { mbbi2Record *mbbiD = (mbbi2Record *) record; long val; if (format->type == DBF_LONG) { if (mbbiD->mask) val = mbbiD->rval & mbbiD->mask; else val = mbbiD->val; return streamPrintf (record, format, val); } return ERROR; } static long initRecord (dbCommon *record) { mbbi2Record *mbbiD = (mbbi2Record *) record; mbbiD->mask <<= mbbiD->shft; return streamInitRecord (record, &mbbiD->inp, readData, writeData) == ERROR ? ERROR : OK; } struct { long number; DEVSUPFUN report; DEVSUPFUN init; DEVSUPFUN init_record; DEVSUPFUN get_ioint_info; DEVSUPFUN read; } devmbbi2Stream = { 5, streamReport, streamInit, initRecord, streamGetIointInfo, streamRead }; epicsExportAddress(dset,devmbbi2Stream);
#ifndef INCmbbi2H #define INCmbbi2H #include "epicsTypes.h" #include "link.h" #include "epicsMutex.h" #include "ellLib.h" #include "epicsTime.h" typedef struct mbbi2Record { char name[61]; /* Record Name */ char desc[41]; /* Descriptor */ char asg[29]; /* Access Security Group */ epicsEnum16 scan; /* Scan Mechanism */ epicsEnum16 pini; /* Process at iocInit */ epicsInt16 phas; /* Scan Phase */ epicsInt16 evnt; /* Event Number */ epicsInt16 tse; /* Time Stamp Event */ DBLINK tsel; /* Time Stamp Link */ epicsEnum16 dtyp; /* Device Type */ epicsInt16 disv; /* Disable Value */ epicsInt16 disa; /* Disable */ DBLINK sdis; /* Scanning Disable */ epicsMutexId mlok; /* Monitor lock */ ELLLIST mlis; /* Monitor List */ epicsUInt8 disp; /* Disable putField */ epicsUInt8 proc; /* Force Processing */ epicsEnum16 stat; /* Alarm Status */ epicsEnum16 sevr; /* Alarm Severity */ epicsEnum16 nsta; /* New Alarm Status */ epicsEnum16 nsev; /* New Alarm Severity */ epicsEnum16 acks; /* Alarm Ack Severity */ epicsEnum16 ackt; /* Alarm Ack Transient */ epicsEnum16 diss; /* Disable Alarm Sevrty */ epicsUInt8 lcnt; /* Lock Count */ epicsUInt8 pact; /* Record active */ epicsUInt8 putf; /* dbPutField process */ epicsUInt8 rpro; /* Reprocess */ struct asgMember *asp; /* Access Security Pvt */ struct putNotify *ppn; /* addr of PUTNOTIFY */ struct putNotifyRecord *ppnr; /* pputNotifyRecord */ struct scan_element *spvt; /* Scan Private */ struct rset *rset; /* Address of RSET */ struct dset *dset; /* DSET address */ void *dpvt; /* Device Private */ struct dbRecordType *rdes; /* Address of dbRecordType */ struct lockRecord *lset; /* Lock Set */ epicsEnum16 prio; /* Scheduling Priority */ epicsUInt8 tpro; /* Trace Processing */ char bkpt; /* Break Point */ epicsUInt8 udf; /* Undefined */ epicsTimeStamp time; /* Time */ DBLINK flnk; /* Forward Process Link */ epicsUInt16 val; /* Current Value */ epicsInt16 nobt; /* Number of Bits */ DBLINK inp; /* Input Specification */ epicsUInt32 rval; /* Raw Value */ epicsUInt32 oraw; /* Prev Raw Value */ epicsUInt32 mask; /* Hardware Mask */ epicsUInt16 mlst; /* Last Value Monitored */ epicsUInt16 lalm; /* Last Value Alarmed */ epicsInt16 sdef; /* States Defined */ epicsUInt16 shft; /* Shift */ DBLINK siol; /* Sim Input Specifctn */ epicsUInt32 sval; /* Simulation Value */ DBLINK siml; /* Sim Mode Location */ epicsEnum16 simm; /* Simulation Mode */ epicsEnum16 sims; /* Sim mode Alarm Svrty */ epicsUInt8 b0; /* Bit 0 */ epicsUInt8 b1; /* Bit 1 */ epicsUInt8 b2; /* Bit 2 */ epicsUInt8 b3; /* Bit 3 */ epicsUInt8 b4; /* Bit 4 */ epicsUInt8 b5; /* Bit 5 */ epicsUInt8 b6; /* Bit 6 */ epicsUInt8 b7; /* Bit 7 */ epicsUInt8 b8; /* Bit 8 */ epicsUInt8 b9; /* Bit 9 */ epicsUInt8 ba; /* Bit A */ epicsUInt8 bb; /* Bit B */ epicsUInt8 bc; /* Bit C */ epicsUInt8 bd; /* Bit D */ epicsUInt8 be; /* Bit E */ epicsUInt8 bf; /* Bit F */ char b0st[26]; /* Bit 0 description */ char b1st[26]; /* Bit 1 description */ char b2st[26]; /* Bit 2 description */ char b3st[26]; /* Bit 3 description */ char b4st[26]; /* Bit 4 description */ char b5st[26]; /* Bit 5 description */ char b6st[26]; /* Bit 6 description */ char b7st[26]; /* Bit 7 description */ char b8st[26]; /* Bit 8 description */ char b9st[26]; /* Bit 9 description */ char bast[26]; /* Bit A description */ char bbst[26]; /* Bit B description */ char bcst[26]; /* Bit C description */ char bdst[26]; /* Bit D description */ char best[26]; /* Bit E description */ char bfst[26]; /* Bit F description */ epicsEnum16 b0zsv; /* Bit 0 zero severity */ epicsEnum16 b1zsv; /* Bit 1 zero severity */ epicsEnum16 b2zsv; /* Bit 2 zero severity */ epicsEnum16 b3zsv; /* Bit 3 zero severity */ epicsEnum16 b4zsv; /* Bit 4 zero severity */ epicsEnum16 b5zsv; /* Bit 5 zero severity */ epicsEnum16 b6zsv; /* Bit 6 zero severity */ epicsEnum16 b7zsv; /* Bit 7 zero severity */ epicsEnum16 b8zsv; /* Bit 8 zero severity */ epicsEnum16 b9zsv; /* Bit 9 zero severity */ epicsEnum16 bazsv; /* Bit A zero severity */ epicsEnum16 bbzsv; /* Bit B zero severity */ epicsEnum16 bczsv; /* Bit C zero severity */ epicsEnum16 bdzsv; /* Bit D zero severity */ epicsEnum16 bezsv; /* Bit E zero severity */ epicsEnum16 bfzsv; /* Bit F zero severity */ epicsEnum16 b0osv; /* Bit 0 one severity */ epicsEnum16 b1osv; /* Bit 1 one severity */ epicsEnum16 b2osv; /* Bit 2 one severity */ epicsEnum16 b3osv; /* Bit 3 one severity */ epicsEnum16 b4osv; /* Bit 4 one severity */ epicsEnum16 b5osv; /* Bit 5 one severity */ epicsEnum16 b6osv; /* Bit 6 one severity */ epicsEnum16 b7osv; /* Bit 7 one severity */ epicsEnum16 b8osv; /* Bit 8 one severity */ epicsEnum16 b9osv; /* Bit 9 one severity */ epicsEnum16 baosv; /* Bit A one severity */ epicsEnum16 bbosv; /* Bit B one severity */ epicsEnum16 bcosv; /* Bit C one severity */ epicsEnum16 bdosv; /* Bit D one severity */ epicsEnum16 beosv; /* Bit E one severity */ epicsEnum16 bfosv; /* Bit F one severity */ epicsUInt16 bas; /* Bits alarm source */ } mbbi2Record; #define mbbi2RecordNAME 0 #define mbbi2RecordDESC 1 #define mbbi2RecordASG 2 #define mbbi2RecordSCAN 3 #define mbbi2RecordPINI 4 #define mbbi2RecordPHAS 5 #define mbbi2RecordEVNT 6 #define mbbi2RecordTSE 7 #define mbbi2RecordTSEL 8 #define mbbi2RecordDTYP 9 #define mbbi2RecordDISV 10 #define mbbi2RecordDISA 11 #define mbbi2RecordSDIS 12 #define mbbi2RecordMLOK 13 #define mbbi2RecordMLIS 14 #define mbbi2RecordDISP 15 #define mbbi2RecordPROC 16 #define mbbi2RecordSTAT 17 #define mbbi2RecordSEVR 18 #define mbbi2RecordNSTA 19 #define mbbi2RecordNSEV 20 #define mbbi2RecordACKS 21 #define mbbi2RecordACKT 22 #define mbbi2RecordDISS 23 #define mbbi2RecordLCNT 24 #define mbbi2RecordPACT 25 #define mbbi2RecordPUTF 26 #define mbbi2RecordRPRO 27 #define mbbi2RecordASP 28 #define mbbi2RecordPPN 29 #define mbbi2RecordPPNR 30 #define mbbi2RecordSPVT 31 #define mbbi2RecordRSET 32 #define mbbi2RecordDSET 33 #define mbbi2RecordDPVT 34 #define mbbi2RecordRDES 35 #define mbbi2RecordLSET 36 #define mbbi2RecordPRIO 37 #define mbbi2RecordTPRO 38 #define mbbi2RecordBKPT 39 #define mbbi2RecordUDF 40 #define mbbi2RecordTIME 41 #define mbbi2RecordFLNK 42 #define mbbi2RecordVAL 43 #define mbbi2RecordNOBT 44 #define mbbi2RecordINP 45 #define mbbi2RecordRVAL 46 #define mbbi2RecordORAW 47 #define mbbi2RecordMASK 48 #define mbbi2RecordMLST 49 #define mbbi2RecordLALM 50 #define mbbi2RecordSDEF 51 #define mbbi2RecordSHFT 52 #define mbbi2RecordSIOL 53 #define mbbi2RecordSVAL 54 #define mbbi2RecordSIML 55 #define mbbi2RecordSIMM 56 #define mbbi2RecordSIMS 57 #define mbbi2RecordB0 58 #define mbbi2RecordB1 59 #define mbbi2RecordB2 60 #define mbbi2RecordB3 61 #define mbbi2RecordB4 62 #define mbbi2RecordB5 63 #define mbbi2RecordB6 64 #define mbbi2RecordB7 65 #define mbbi2RecordB8 66 #define mbbi2RecordB9 67 #define mbbi2RecordBA 68 #define mbbi2RecordBB 69 #define mbbi2RecordBC 70 #define mbbi2RecordBD 71 #define mbbi2RecordBE 72 #define mbbi2RecordBF 73 #define mbbi2RecordB0ST 74 #define mbbi2RecordB1ST 75 #define mbbi2RecordB2ST 76 #define mbbi2RecordB3ST 77 #define mbbi2RecordB4ST 78 #define mbbi2RecordB5ST 79 #define mbbi2RecordB6ST 80 #define mbbi2RecordB7ST 81 #define mbbi2RecordB8ST 82 #define mbbi2RecordB9ST 83 #define mbbi2RecordBAST 84 #define mbbi2RecordBBST 85 #define mbbi2RecordBCST 86 #define mbbi2RecordBDST 87 #define mbbi2RecordBEST 88 #define mbbi2RecordBFST 89 #define mbbi2RecordB0ZSV 90 #define mbbi2RecordB1ZSV 91 #define mbbi2RecordB2ZSV 92 #define mbbi2RecordB3ZSV 93 #define mbbi2RecordB4ZSV 94 #define mbbi2RecordB5ZSV 95 #define mbbi2RecordB6ZSV 96 #define mbbi2RecordB7ZSV 97 #define mbbi2RecordB8ZSV 98 #define mbbi2RecordB9ZSV 99 #define mbbi2RecordBAZSV 100 #define mbbi2RecordBBZSV 101 #define mbbi2RecordBCZSV 102 #define mbbi2RecordBDZSV 103 #define mbbi2RecordBEZSV 104 #define mbbi2RecordBFZSV 105 #define mbbi2RecordB0OSV 106 #define mbbi2RecordB1OSV 107 #define mbbi2RecordB2OSV 108 #define mbbi2RecordB3OSV 109 #define mbbi2RecordB4OSV 110 #define mbbi2RecordB5OSV 111 #define mbbi2RecordB6OSV 112 #define mbbi2RecordB7OSV 113 #define mbbi2RecordB8OSV 114 #define mbbi2RecordB9OSV 115 #define mbbi2RecordBAOSV 116 #define mbbi2RecordBBOSV 117 #define mbbi2RecordBCOSV 118 #define mbbi2RecordBDOSV 119 #define mbbi2RecordBEOSV 120 #define mbbi2RecordBFOSV 121 #define mbbi2RecordBAS 122 #endif /*INCmbbi2H*/ #ifdef GEN_SIZE_OFFSET #ifdef __cplusplus extern "C" { #endif #include <epicsExport.h> static int mbbi2RecordSizeOffset(dbRecordType *pdbRecordType) { mbbi2Record *prec = 0; pdbRecordType->papFldDes[0]->size=sizeof(prec->name); pdbRecordType->papFldDes[0]->offset=(short)((char *)&prec->name - (char *)prec); pdbRecordType->papFldDes[1]->size=sizeof(prec->desc); pdbRecordType->papFldDes[1]->offset=(short)((char *)&prec->desc - (char *)prec); pdbRecordType->papFldDes[2]->size=sizeof(prec->asg); pdbRecordType->papFldDes[2]->offset=(short)((char *)&prec->asg - (char *)prec); pdbRecordType->papFldDes[3]->size=sizeof(prec->scan); pdbRecordType->papFldDes[3]->offset=(short)((char *)&prec->scan - (char *)prec); pdbRecordType->papFldDes[4]->size=sizeof(prec->pini); pdbRecordType->papFldDes[4]->offset=(short)((char *)&prec->pini - (char *)prec); pdbRecordType->papFldDes[5]->size=sizeof(prec->phas); pdbRecordType->papFldDes[5]->offset=(short)((char *)&prec->phas - (char *)prec); pdbRecordType->papFldDes[6]->size=sizeof(prec->evnt); pdbRecordType->papFldDes[6]->offset=(short)((char *)&prec->evnt - (char *)prec); pdbRecordType->papFldDes[7]->size=sizeof(prec->tse); pdbRecordType->papFldDes[7]->offset=(short)((char *)&prec->tse - (char *)prec); pdbRecordType->papFldDes[8]->size=sizeof(prec->tsel); pdbRecordType->papFldDes[8]->offset=(short)((char *)&prec->tsel - (char *)prec); pdbRecordType->papFldDes[9]->size=sizeof(prec->dtyp); pdbRecordType->papFldDes[9]->offset=(short)((char *)&prec->dtyp - (char *)prec); pdbRecordType->papFldDes[10]->size=sizeof(prec->disv); pdbRecordType->papFldDes[10]->offset=(short)((char *)&prec->disv - (char *)prec); pdbRecordType->papFldDes[11]->size=sizeof(prec->disa); pdbRecordType->papFldDes[11]->offset=(short)((char *)&prec->disa - (char *)prec); pdbRecordType->papFldDes[12]->size=sizeof(prec->sdis); pdbRecordType->papFldDes[12]->offset=(short)((char *)&prec->sdis - (char *)prec); pdbRecordType->papFldDes[13]->size=sizeof(prec->mlok); pdbRecordType->papFldDes[13]->offset=(short)((char *)&prec->mlok - (char *)prec); pdbRecordType->papFldDes[14]->size=sizeof(prec->mlis); pdbRecordType->papFldDes[14]->offset=(short)((char *)&prec->mlis - (char *)prec); pdbRecordType->papFldDes[15]->size=sizeof(prec->disp); pdbRecordType->papFldDes[15]->offset=(short)((char *)&prec->disp - (char *)prec); pdbRecordType->papFldDes[16]->size=sizeof(prec->proc); pdbRecordType->papFldDes[16]->offset=(short)((char *)&prec->proc - (char *)prec); pdbRecordType->papFldDes[17]->size=sizeof(prec->stat); pdbRecordType->papFldDes[17]->offset=(short)((char *)&prec->stat - (char *)prec); pdbRecordType->papFldDes[18]->size=sizeof(prec->sevr); pdbRecordType->papFldDes[18]->offset=(short)((char *)&prec->sevr - (char *)prec); pdbRecordType->papFldDes[19]->size=sizeof(prec->nsta); pdbRecordType->papFldDes[19]->offset=(short)((char *)&prec->nsta - (char *)prec); pdbRecordType->papFldDes[20]->size=sizeof(prec->nsev); pdbRecordType->papFldDes[20]->offset=(short)((char *)&prec->nsev - (char *)prec); pdbRecordType->papFldDes[21]->size=sizeof(prec->acks); pdbRecordType->papFldDes[21]->offset=(short)((char *)&prec->acks - (char *)prec); pdbRecordType->papFldDes[22]->size=sizeof(prec->ackt); pdbRecordType->papFldDes[22]->offset=(short)((char *)&prec->ackt - (char *)prec); pdbRecordType->papFldDes[23]->size=sizeof(prec->diss); pdbRecordType->papFldDes[23]->offset=(short)((char *)&prec->diss - (char *)prec); pdbRecordType->papFldDes[24]->size=sizeof(prec->lcnt); pdbRecordType->papFldDes[24]->offset=(short)((char *)&prec->lcnt - (char *)prec); pdbRecordType->papFldDes[25]->size=sizeof(prec->pact); pdbRecordType->papFldDes[25]->offset=(short)((char *)&prec->pact - (char *)prec); pdbRecordType->papFldDes[26]->size=sizeof(prec->putf); pdbRecordType->papFldDes[26]->offset=(short)((char *)&prec->putf - (char *)prec); pdbRecordType->papFldDes[27]->size=sizeof(prec->rpro); pdbRecordType->papFldDes[27]->offset=(short)((char *)&prec->rpro - (char *)prec); pdbRecordType->papFldDes[28]->size=sizeof(prec->asp); pdbRecordType->papFldDes[28]->offset=(short)((char *)&prec->asp - (char *)prec); pdbRecordType->papFldDes[29]->size=sizeof(prec->ppn); pdbRecordType->papFldDes[29]->offset=(short)((char *)&prec->ppn - (char *)prec); pdbRecordType->papFldDes[30]->size=sizeof(prec->ppnr); pdbRecordType->papFldDes[30]->offset=(short)((char *)&prec->ppnr - (char *)prec); pdbRecordType->papFldDes[31]->size=sizeof(prec->spvt); pdbRecordType->papFldDes[31]->offset=(short)((char *)&prec->spvt - (char *)prec); pdbRecordType->papFldDes[32]->size=sizeof(prec->rset); pdbRecordType->papFldDes[32]->offset=(short)((char *)&prec->rset - (char *)prec); pdbRecordType->papFldDes[33]->size=sizeof(prec->dset); pdbRecordType->papFldDes[33]->offset=(short)((char *)&prec->dset - (char *)prec); pdbRecordType->papFldDes[34]->size=sizeof(prec->dpvt); pdbRecordType->papFldDes[34]->offset=(short)((char *)&prec->dpvt - (char *)prec); pdbRecordType->papFldDes[35]->size=sizeof(prec->rdes); pdbRecordType->papFldDes[35]->offset=(short)((char *)&prec->rdes - (char *)prec); pdbRecordType->papFldDes[36]->size=sizeof(prec->lset); pdbRecordType->papFldDes[36]->offset=(short)((char *)&prec->lset - (char *)prec); pdbRecordType->papFldDes[37]->size=sizeof(prec->prio); pdbRecordType->papFldDes[37]->offset=(short)((char *)&prec->prio - (char *)prec); pdbRecordType->papFldDes[38]->size=sizeof(prec->tpro); pdbRecordType->papFldDes[38]->offset=(short)((char *)&prec->tpro - (char *)prec); pdbRecordType->papFldDes[39]->size=sizeof(prec->bkpt); pdbRecordType->papFldDes[39]->offset=(short)((char *)&prec->bkpt - (char *)prec); pdbRecordType->papFldDes[40]->size=sizeof(prec->udf); pdbRecordType->papFldDes[40]->offset=(short)((char *)&prec->udf - (char *)prec); pdbRecordType->papFldDes[41]->size=sizeof(prec->time); pdbRecordType->papFldDes[41]->offset=(short)((char *)&prec->time - (char *)prec); pdbRecordType->papFldDes[42]->size=sizeof(prec->flnk); pdbRecordType->papFldDes[42]->offset=(short)((char *)&prec->flnk - (char *)prec); pdbRecordType->papFldDes[43]->size=sizeof(prec->val); pdbRecordType->papFldDes[43]->offset=(short)((char *)&prec->val - (char *)prec); pdbRecordType->papFldDes[44]->size=sizeof(prec->nobt); pdbRecordType->papFldDes[44]->offset=(short)((char *)&prec->nobt - (char *)prec); pdbRecordType->papFldDes[45]->size=sizeof(prec->inp); pdbRecordType->papFldDes[45]->offset=(short)((char *)&prec->inp - (char *)prec); pdbRecordType->papFldDes[46]->size=sizeof(prec->rval); pdbRecordType->papFldDes[46]->offset=(short)((char *)&prec->rval - (char *)prec); pdbRecordType->papFldDes[47]->size=sizeof(prec->oraw); pdbRecordType->papFldDes[47]->offset=(short)((char *)&prec->oraw - (char *)prec); pdbRecordType->papFldDes[48]->size=sizeof(prec->mask); pdbRecordType->papFldDes[48]->offset=(short)((char *)&prec->mask - (char *)prec); pdbRecordType->papFldDes[49]->size=sizeof(prec->mlst); pdbRecordType->papFldDes[49]->offset=(short)((char *)&prec->mlst - (char *)prec); pdbRecordType->papFldDes[50]->size=sizeof(prec->lalm); pdbRecordType->papFldDes[50]->offset=(short)((char *)&prec->lalm - (char *)prec); pdbRecordType->papFldDes[51]->size=sizeof(prec->sdef); pdbRecordType->papFldDes[51]->offset=(short)((char *)&prec->sdef - (char *)prec); pdbRecordType->papFldDes[52]->size=sizeof(prec->shft); pdbRecordType->papFldDes[52]->offset=(short)((char *)&prec->shft - (char *)prec); pdbRecordType->papFldDes[53]->size=sizeof(prec->siol); pdbRecordType->papFldDes[53]->offset=(short)((char *)&prec->siol - (char *)prec); pdbRecordType->papFldDes[54]->size=sizeof(prec->sval); pdbRecordType->papFldDes[54]->offset=(short)((char *)&prec->sval - (char *)prec); pdbRecordType->papFldDes[55]->size=sizeof(prec->siml); pdbRecordType->papFldDes[55]->offset=(short)((char *)&prec->siml - (char *)prec); pdbRecordType->papFldDes[56]->size=sizeof(prec->simm); pdbRecordType->papFldDes[56]->offset=(short)((char *)&prec->simm - (char *)prec); pdbRecordType->papFldDes[57]->size=sizeof(prec->sims); pdbRecordType->papFldDes[57]->offset=(short)((char *)&prec->sims - (char *)prec); pdbRecordType->papFldDes[58]->size=sizeof(prec->b0); pdbRecordType->papFldDes[58]->offset=(short)((char *)&prec->b0 - (char *)prec); pdbRecordType->papFldDes[59]->size=sizeof(prec->b1); pdbRecordType->papFldDes[59]->offset=(short)((char *)&prec->b1 - (char *)prec); pdbRecordType->papFldDes[60]->size=sizeof(prec->b2); pdbRecordType->papFldDes[60]->offset=(short)((char *)&prec->b2 - (char *)prec); pdbRecordType->papFldDes[61]->size=sizeof(prec->b3); pdbRecordType->papFldDes[61]->offset=(short)((char *)&prec->b3 - (char *)prec); pdbRecordType->papFldDes[62]->size=sizeof(prec->b4); pdbRecordType->papFldDes[62]->offset=(short)((char *)&prec->b4 - (char *)prec); pdbRecordType->papFldDes[63]->size=sizeof(prec->b5); pdbRecordType->papFldDes[63]->offset=(short)((char *)&prec->b5 - (char *)prec); pdbRecordType->papFldDes[64]->size=sizeof(prec->b6); pdbRecordType->papFldDes[64]->offset=(short)((char *)&prec->b6 - (char *)prec); pdbRecordType->papFldDes[65]->size=sizeof(prec->b7); pdbRecordType->papFldDes[65]->offset=(short)((char *)&prec->b7 - (char *)prec); pdbRecordType->papFldDes[66]->size=sizeof(prec->b8); pdbRecordType->papFldDes[66]->offset=(short)((char *)&prec->b8 - (char *)prec); pdbRecordType->papFldDes[67]->size=sizeof(prec->b9); pdbRecordType->papFldDes[67]->offset=(short)((char *)&prec->b9 - (char *)prec); pdbRecordType->papFldDes[68]->size=sizeof(prec->ba); pdbRecordType->papFldDes[68]->offset=(short)((char *)&prec->ba - (char *)prec); pdbRecordType->papFldDes[69]->size=sizeof(prec->bb); pdbRecordType->papFldDes[69]->offset=(short)((char *)&prec->bb - (char *)prec); pdbRecordType->papFldDes[70]->size=sizeof(prec->bc); pdbRecordType->papFldDes[70]->offset=(short)((char *)&prec->bc - (char *)prec); pdbRecordType->papFldDes[71]->size=sizeof(prec->bd); pdbRecordType->papFldDes[71]->offset=(short)((char *)&prec->bd - (char *)prec); pdbRecordType->papFldDes[72]->size=sizeof(prec->be); pdbRecordType->papFldDes[72]->offset=(short)((char *)&prec->be - (char *)prec); pdbRecordType->papFldDes[73]->size=sizeof(prec->bf); pdbRecordType->papFldDes[73]->offset=(short)((char *)&prec->bf - (char *)prec); pdbRecordType->papFldDes[74]->size=sizeof(prec->b0st); pdbRecordType->papFldDes[74]->offset=(short)((char *)&prec->b0st - (char *)prec); pdbRecordType->papFldDes[75]->size=sizeof(prec->b1st); pdbRecordType->papFldDes[75]->offset=(short)((char *)&prec->b1st - (char *)prec); pdbRecordType->papFldDes[76]->size=sizeof(prec->b2st); pdbRecordType->papFldDes[76]->offset=(short)((char *)&prec->b2st - (char *)prec); pdbRecordType->papFldDes[77]->size=sizeof(prec->b3st); pdbRecordType->papFldDes[77]->offset=(short)((char *)&prec->b3st - (char *)prec); pdbRecordType->papFldDes[78]->size=sizeof(prec->b4st); pdbRecordType->papFldDes[78]->offset=(short)((char *)&prec->b4st - (char *)prec); pdbRecordType->papFldDes[79]->size=sizeof(prec->b5st); pdbRecordType->papFldDes[79]->offset=(short)((char *)&prec->b5st - (char *)prec); pdbRecordType->papFldDes[80]->size=sizeof(prec->b6st); pdbRecordType->papFldDes[80]->offset=(short)((char *)&prec->b6st - (char *)prec); pdbRecordType->papFldDes[81]->size=sizeof(prec->b7st); pdbRecordType->papFldDes[81]->offset=(short)((char *)&prec->b7st - (char *)prec); pdbRecordType->papFldDes[82]->size=sizeof(prec->b8st); pdbRecordType->papFldDes[82]->offset=(short)((char *)&prec->b8st - (char *)prec); pdbRecordType->papFldDes[83]->size=sizeof(prec->b9st); pdbRecordType->papFldDes[83]->offset=(short)((char *)&prec->b9st - (char *)prec); pdbRecordType->papFldDes[84]->size=sizeof(prec->bast); pdbRecordType->papFldDes[84]->offset=(short)((char *)&prec->bast - (char *)prec); pdbRecordType->papFldDes[85]->size=sizeof(prec->bbst); pdbRecordType->papFldDes[85]->offset=(short)((char *)&prec->bbst - (char *)prec); pdbRecordType->papFldDes[86]->size=sizeof(prec->bcst); pdbRecordType->papFldDes[86]->offset=(short)((char *)&prec->bcst - (char *)prec); pdbRecordType->papFldDes[87]->size=sizeof(prec->bdst); pdbRecordType->papFldDes[87]->offset=(short)((char *)&prec->bdst - (char *)prec); pdbRecordType->papFldDes[88]->size=sizeof(prec->best); pdbRecordType->papFldDes[88]->offset=(short)((char *)&prec->best - (char *)prec); pdbRecordType->papFldDes[89]->size=sizeof(prec->bfst); pdbRecordType->papFldDes[89]->offset=(short)((char *)&prec->bfst - (char *)prec); pdbRecordType->papFldDes[90]->size=sizeof(prec->b0zsv); pdbRecordType->papFldDes[90]->offset=(short)((char* )&prec->b0zsv - (char *)prec); pdbRecordType->papFldDes[91]->size=sizeof(prec->b1zsv); pdbRecordType->papFldDes[91]->offset=(short)((char* )&prec->b1zsv - (char *)prec); pdbRecordType->papFldDes[92]->size=sizeof(prec->b2zsv); pdbRecordType->papFldDes[92]->offset=(short)((char* )&prec->b2zsv - (char *)prec); pdbRecordType->papFldDes[93]->size=sizeof(prec->b3zsv); pdbRecordType->papFldDes[93]->offset=(short)((char* )&prec->b3zsv - (char *)prec); pdbRecordType->papFldDes[94]->size=sizeof(prec->b4zsv); pdbRecordType->papFldDes[94]->offset=(short)((char* )&prec->b4zsv - (char *)prec); pdbRecordType->papFldDes[95]->size=sizeof(prec->b5zsv); pdbRecordType->papFldDes[95]->offset=(short)((char* )&prec->b5zsv - (char *)prec); pdbRecordType->papFldDes[96]->size=sizeof(prec->b6zsv); pdbRecordType->papFldDes[96]->offset=(short)((char* )&prec->b6zsv - (char *)prec); pdbRecordType->papFldDes[97]->size=sizeof(prec->b7zsv); pdbRecordType->papFldDes[97]->offset=(short)((char* )&prec->b7zsv - (char *)prec); pdbRecordType->papFldDes[98]->size=sizeof(prec->b8zsv); pdbRecordType->papFldDes[98]->offset=(short)((char* )&prec->b8zsv - (char *)prec); pdbRecordType->papFldDes[99]->size=sizeof(prec->b9zsv); pdbRecordType->papFldDes[99]->offset=(short)((char* )&prec->b9zsv - (char *)prec); pdbRecordType->papFldDes[100]->size=sizeof(prec->bazsv); pdbRecordType->papFldDes[100]->offset=(short)((char* )&prec->bazsv - (char *)prec); pdbRecordType->papFldDes[101]->size=sizeof(prec->bbzsv); pdbRecordType->papFldDes[101]->offset=(short)((char* )&prec->bbzsv - (char *)prec); pdbRecordType->papFldDes[102]->size=sizeof(prec->bczsv); pdbRecordType->papFldDes[102]->offset=(short)((char* )&prec->bczsv - (char *)prec); pdbRecordType->papFldDes[103]->size=sizeof(prec->bdzsv); pdbRecordType->papFldDes[103]->offset=(short)((char* )&prec->bdzsv - (char *)prec); pdbRecordType->papFldDes[104]->size=sizeof(prec->bezsv); pdbRecordType->papFldDes[104]->offset=(short)((char* )&prec->bezsv - (char *)prec); pdbRecordType->papFldDes[105]->size=sizeof(prec->bfzsv); pdbRecordType->papFldDes[105]->offset=(short)((char* )&prec->bfzsv - (char *)prec); pdbRecordType->papFldDes[106]->size=sizeof(prec->b0osv); pdbRecordType->papFldDes[106]->offset=(short)((char* )&prec->b0osv - (char *)prec); pdbRecordType->papFldDes[107]->size=sizeof(prec->b1osv); pdbRecordType->papFldDes[107]->offset=(short)((char* )&prec->b1osv - (char *)prec); pdbRecordType->papFldDes[108]->size=sizeof(prec->b2osv); pdbRecordType->papFldDes[108]->offset=(short)((char* )&prec->b2osv - (char *)prec); pdbRecordType->papFldDes[109]->size=sizeof(prec->b3osv); pdbRecordType->papFldDes[109]->offset=(short)((char* )&prec->b3osv - (char *)prec); pdbRecordType->papFldDes[110]->size=sizeof(prec->b4osv); pdbRecordType->papFldDes[110]->offset=(short)((char* )&prec->b4osv - (char *)prec); pdbRecordType->papFldDes[111]->size=sizeof(prec->b5osv); pdbRecordType->papFldDes[111]->offset=(short)((char* )&prec->b5osv - (char *)prec); pdbRecordType->papFldDes[112]->size=sizeof(prec->b6osv); pdbRecordType->papFldDes[112]->offset=(short)((char* )&prec->b6osv - (char *)prec); pdbRecordType->papFldDes[113]->size=sizeof(prec->b7osv); pdbRecordType->papFldDes[113]->offset=(short)((char* )&prec->b7osv - (char *)prec); pdbRecordType->papFldDes[114]->size=sizeof(prec->b8osv); pdbRecordType->papFldDes[114]->offset=(short)((char* )&prec->b8osv - (char *)prec); pdbRecordType->papFldDes[115]->size=sizeof(prec->b9osv); pdbRecordType->papFldDes[115]->offset=(short)((char* )&prec->b9osv - (char *)prec); pdbRecordType->papFldDes[116]->size=sizeof(prec->baosv); pdbRecordType->papFldDes[116]->offset=(short)((char* )&prec->baosv - (char *)prec); pdbRecordType->papFldDes[117]->size=sizeof(prec->bbosv); pdbRecordType->papFldDes[117]->offset=(short)((char* )&prec->bbosv - (char *)prec); pdbRecordType->papFldDes[118]->size=sizeof(prec->bcosv); pdbRecordType->papFldDes[118]->offset=(short)((char* )&prec->bcosv - (char *)prec); pdbRecordType->papFldDes[119]->size=sizeof(prec->bdosv); pdbRecordType->papFldDes[119]->offset=(short)((char* )&prec->bdosv - (char *)prec); pdbRecordType->papFldDes[120]->size=sizeof(prec->beosv); pdbRecordType->papFldDes[120]->offset=(short)((char* )&prec->beosv - (char *)prec); pdbRecordType->papFldDes[121]->size=sizeof(prec->bfosv); pdbRecordType->papFldDes[121]->offset=(short)((char* )&prec->bfosv - (char *)prec); pdbRecordType->papFldDes[122]->size=sizeof(prec->bas); pdbRecordType->papFldDes[122]->offset=(short)((char* )&prec->bas - (char *)prec); pdbRecordType->rec_size = sizeof(*prec); return(0); } epicsExportRegistrar(mbbi2RecordSizeOffset); #ifdef __cplusplus } #endif #endif /*GEN_SIZE_OFFSET*/