registerRecordDeviceDriver.c moved from src/registry

This commit is contained in:
Marty Kraimer
2001-02-21 14:09:23 +00:00
parent ad0819ba51
commit 6348d4c311
2 changed files with 88 additions and 0 deletions
+1
View File
@@ -15,6 +15,7 @@ iocCore_OBJS += $(INSTALL_BIN)/dbtoolsIocLibrary.o
iocCore_OBJS += $(INSTALL_BIN)/rsrvIocLibrary.o
iocCore_OBJS += $(INSTALL_BIN)/vxComLibrary.o
iocCore_OBJS += $(INSTALL_BIN)/vxDbLibrary.o
iocCore_SRCS += registerRecordDeviceDriver.c
include $(TOP)/configure/RULES
@@ -0,0 +1,87 @@
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include "dbStaticLib.h"
#include "recSup.h"
#include "devSup.h"
#include "drvSup.h"
#include "cantProceed.h"
#define epicsExportSharedSymbols
#include "registry.h"
#include "registryRecordType.h"
#include "registryDeviceSupport.h"
#include "registryDriverSupport.h"
int registerRecordDeviceDriver(struct dbBase *pdbbase)
{
dbRecordType *pdbRecordType;
recordTypeLocation *precordTypeLocation;
struct rset *prset;
computeSizeOffset sizeOffset;
char name[100];
drvSup *pdrvSup;
if(!pdbbase) {
printf("pdbbase not specified\n");
return(0);
}
for(pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
pdbRecordType;
pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {
if(registryRecordTypeFind(pdbRecordType->name)) continue;
strcpy(name,pdbRecordType->name);
strcat(name,"RSET");
prset = 0;
prset = registryFind(0,name);
if(!prset) continue;
strcpy(name,pdbRecordType->name);
strcat(name,"RecordSizeOffset");
sizeOffset = 0;
sizeOffset = (computeSizeOffset) registryFind(0,name);
if(!sizeOffset) continue;
precordTypeLocation = callocMustSucceed(1,sizeof(recordTypeLocation),
"registerRecordDeviceDriver");
precordTypeLocation->prset = prset;
precordTypeLocation->sizeOffset = sizeOffset;
if(!registryRecordTypeAdd(pdbRecordType->name,precordTypeLocation)) {
errlogPrintf("registryRecordTypeAdd failed for %s\n",
pdbRecordType->name);
continue;
}
sizeOffset(pdbRecordType);
}
for(pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
pdbRecordType;
pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {
devSup *pdevSup;
struct dset *pdset;
for(pdevSup = (devSup *)ellFirst(&pdbRecordType->devList);
pdevSup;
pdevSup = (devSup *)ellNext(&pdevSup->node)) {
if(registryDeviceSupportFind(pdevSup->name)) continue;
pdset = registryFind(0,pdevSup->name);
if(!pdset) continue;
if(!registryDeviceSupportAdd(pdevSup->name,pdset)) {
errlogPrintf("registryRecordTypeAdd failed for %s\n",
pdevSup->name);
}
}
}
for(pdrvSup = (drvSup *)ellFirst(&pdbbase->drvList);
pdrvSup;
pdrvSup = (drvSup *)ellNext(&pdrvSup->node)) {
struct drvet *pdrvet = 0;
if(registryDriverSupportFind(pdrvSup->name)) continue;
pdrvet = registryFind(0,pdrvSup->name);
if(!pdrvet) continue;
if(!registryDriverSupportAdd(pdrvSup->name,pdrvet)) {
errlogPrintf("registryRecordTypeAdd failed for %s\n",
pdrvSup->name);
}
}
return(0);
}