new for 3.14

This commit is contained in:
Marty Kraimer
1999-09-13 19:33:37 +00:00
parent 76ef734aed
commit 4417db23fe
14 changed files with 603 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
#ifndef INCregistryDeviceSupporth
#define INCregistryDeviceSupporth
#ifdef __cplusplus
extern "C" {
#endif
int registryDeviceSupportAdd(const char *name,struct dset *pdset);
struct dset *registryDeviceSupportFind(const char *name);
#ifdef __cplusplus
}
#endif
#endif /* INCregistryDeviceSupporth */
+18
View File
@@ -0,0 +1,18 @@
#ifndef INCregistryDriverSupporth
#define INCregistryDriverSupporth
#ifdef __cplusplus
extern "C" {
#endif
/* c interface definitions */
int registryDriverSupportAdd(const char *name,struct drvet *pdrvet);
struct drvet *registryDriverSupportFind(const char *name);
#ifdef __cplusplus
}
#endif
#endif /* INCregistryDriverSupporth */
+28
View File
@@ -0,0 +1,28 @@
#ifndef INCregistryRecordTypeh
#define INCregistryRecordTypeh
#include "dbStaticLib.h"
typedef int (*computeSizeOffset)(dbRecordType *pdbRecordType);
typedef struct recordTypeLocation {
struct rset *prset;
computeSizeOffset sizeOffset;
}recordTypeLocation;
#ifdef __cplusplus
extern "C" {
#endif
int registryRecordTypeAdd(const char *name,recordTypeLocation *prtl);
recordTypeLocation *registryRecordTypeFind(const char *name);
/* The following function is generated by registerRecordDeviceDriver/pl */
int registerRecordDeviceDriver(DBBASE *pdbbase);
#ifdef __cplusplus
}
#endif
#endif /* INCregistryRecordTypeh */
+30
View File
@@ -0,0 +1,30 @@
TOP=../..
include $(TOP)/configure/CONFIG
# includes to install from this sub-project
#
INC += registry.h
INC += registryDeviceSupport.h
INC += registryDriverSupport.h
INC += registryRecordType.h
# general contents of library on all platforms
#
# system specific lines in RULES.Host figure out
# 1) what object names (.o, .obj,...) to build
# 2) where to find the sources: ., ./os/<ARCH_CLASS>, ./os/generic, ...
#
SCRIPTS += registerRecordDeviceDriver.pl
registryLibrary_SRCS += registry.c
registryLibrary_SRCS += registryRecordType.c
registryLibrary_SRCS += registryDeviceSupport.c
registryLibrary_SRCS += registryDriverSupport.c
IOC_PROD_vxWorks = registerRecordDeviceDriver.o
IOC_LIBRARY_vxWorks = registryLibrary
include $(TOP)/configure/RULES_BUILD
+84
View File
@@ -0,0 +1,84 @@
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include "recSup.h"
#include "devSup.h"
#include "drvSup.h"
#include "cantProceed.h"
#include "registry.h"
#include "registryRecordType.h"
#include "registryDeviceSupport.h"
#include "registryDriverSupport.h"
int registerRecordDeviceDriver(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);
}
+176
View File
@@ -0,0 +1,176 @@
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
if $running_under_some_shell; # registerRecordDeviceDriver
$file = $ARGV[0];
$numberRecordType = 0;
$numberDeviceSupport = 0;
$numberDriverSupport = 0;
open(INP,"$file") or die "$! opening file";
while(<INP>) {
if( /recordtype/) {
/recordtype\s*\(\s*(\w+)/;
$recordType[$numberRecordType++] = $1;
}
if( /device/) {
/device\s*\(\s*(\s*\w+)\W+\w+\W+(\w+)/;
$deviceRecordType[$numberDeviceSupport] = $1;
$deviceSupport[$numberDeviceSupport] = $2;
$numberDeviceSupport++;
}
if( /driver/) {
/driver\s*\(\s*(\w+)/;
$driverSupport[$numberDriverSupport++] = $1;
}
}
close(INP) or die "$! closing file";
# beginning of generated routine
print << "END" ;
/*#registerRecordDeviceDriver.c */
/* THIS IS A GENERATED FILE. DO NOT EDIT */
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include "recSup.h"
#include "devSup.h"
#include "drvSup.h"
#include "registryRecordType.h"
#include "registryDeviceSupport.h"
#include "registryDriverSupport.h"
END
#definitions for recordtype
if($numberRecordType>0) {
for ($i=0; $i<$numberRecordType; $i++) {
print "extern struct rset $recordType[$i]RSET;\n";
print "extern int $recordType[$i]RecordSizeOffset(dbRecordType *pdbRecordType);\n";
#NOTE the followimng caused a compiler error on vxWorks
# print "extern computeSizeOffset $recordType[$i]RecordSizeOffset;\n";
}
print "\nstatic char *recordTypeNames[$numberRecordType] = {\n";
for ($i=0; $i<$numberRecordType; $i++) {
print " \"$recordType[$i]\"";
if($i < $numberRecordType-1) { print ",";}
print "\n";
}
print "};\n\n";
print "static recordTypeLocation rtl[$i] = {\n";
for ($i=0; $i<$numberRecordType; $i++) {
print " {&$recordType[$i]RSET, $recordType[$i]RecordSizeOffset}";
if($i < $numberRecordType-1) { print ",";}
print "\n";
}
print "};\n\n";
}
#definitions for device
if($numberDeviceSupport>0) {
for ($i=0; $i<$numberDeviceSupport; $i++) {
print "extern struct dset $deviceSupport[$i];\n";
}
print "\nstatic char *deviceSupportNames[$numberDeviceSupport] = {\n";
for ($i=0; $i<$numberDeviceSupport; $i++) {
print " \"$deviceSupport[$i]\"";
if($i < $numberDeviceSupport-1) { print ",";}
print "\n";
}
print "};\n\n";
print "static struct dset *devsl[$i] = {\n";
for ($i=0; $i<$numberDeviceSupport; $i++) {
print " &$deviceSupport[$i]";
if($i < $numberDeviceSupport-1) { print ",";}
print "\n";
}
print "};\n\n";
}
#definitions for driver
if($numberDriverSupport>0) {
for ($i=0; $i<$numberDriverSupport; $i++) {
print "extern struct drvet $driverSupport[$i];\n";
}
print "\nstatic char *driverSupportNames[$numberDriverSupport] = {\n";
for ($i=0; $i<$numberDriverSupport; $i++) {
print " \"$driverSupport[$i]\"";
if($i < $numberDriverSupport-1) { print ",";}
print "\n";
}
print "};\n\n";
print "static struct drvet *drvsl[$i] = {\n";
for ($i=0; $i<$numberDriverSupport; $i++) {
print " &$driverSupport[$i]";
if($i < $numberDriverSupport-1) { print ",";}
print "\n";
}
print "};\n\n";
}
#Now actual registration code.
print << "END" ;
int registerRecordDeviceDriver(DBBASE *pdbbase)
{
int i;
int result;
static int alreadyCalled = 0;
if(alreadyCalled) {
printf(\"registerRecordDeviceDriver called multiple times\\n\");
return(-1);
}
END
if($numberRecordType>0) {
print << "END" ;
for(i=0; i< $numberRecordType; i++ ) {
result = registryRecordTypeAdd(recordTypeNames[i],&rtl[i]);
if(result) {
recordTypeLocation *precordTypeLocation;
int (*sizeOffset)(dbRecordType *pdbRecordType);
DBENTRY dbEntry;
dbInitEntry(pdbbase,&dbEntry);
precordTypeLocation = registryRecordTypeFind(recordTypeNames[i]);
sizeOffset = precordTypeLocation->sizeOffset;
if(dbFindRecordType(&dbEntry,recordTypeNames[i])) {
printf(\"registerRecordDeviceDriver failed %s\\n\",
recordTypeNames[i]);
} else {
sizeOffset(dbEntry.precordType);
}
} else {
printf(\"registerRecordDeviceDriver failed %s\\n\",recordTypeNames[i]);
}
}
END
}
if($numberDeviceSupport>0) {
print << "END" ;
for(i=0; i< $numberDeviceSupport; i++ ) {
result = registryDeviceSupportAdd(deviceSupportNames[i],devsl[i]);
if(!result)
printf(\"registerRecordDeviceDriver failed %s\\n\",
\"deviceSupportNames[i]\");
}
END
}
if($numberDriverSupport>0) {
print << "END" ;
for(i=0; i< $numberDriverSupport; i++ ) {
result = registryDriverSupportAdd(driverSupportNames[i],drvsl[i]);
if(!result)
printf(\"registerRecordDeviceDriver failed %s\\n\",
\"driverSupportNames[i]\");
}
END
}
print << "END" ;
return(0);
}
END
+74
View File
@@ -0,0 +1,74 @@
/*registry.c */
/* Author: Marty Kraimer Date: 08JUN99 */
/********************COPYRIGHT NOTIFICATION**********************************
This software was developed under a United States Government license
described on the COPYRIGHT_UniversityOfChicago file included as part
of this distribution.
****************************************************************************/
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include "dbDefs.h"
#include "cantProceed.h"
#include "osiFindGlobalSymbol.h"
#include "gpHash.h"
#include "registry.h"
static void *gphPvt = 0;
static void registryInit(int tableSize)
{
if(tableSize==0) tableSize = DEFAULT_TABLE_SIZE;
gphInitPvt(&gphPvt,tableSize);
if(!gphPvt) cantProceed("registry why did gphInitPvt fail\n");
}
int registrySetTableSize(int size)
{
if(gphPvt) {
printf("registryInit already called\n");
return(-1);
}
registryInit(size);
return(0);
}
int registryAdd(void *registryID,const char *name,void *data)
{
GPHENTRY *pentry;
if(!gphPvt) registryInit(0);
pentry = gphAdd(gphPvt,name,registryID);
if(!pentry) return(FALSE);
pentry->userPvt = (void *)data;
return(TRUE);
}
void *registryFind(void *registryID,const char *name)
{
GPHENTRY *pentry;
if(name==0) return(0);
if(registryID==0) return(osiFindGlobalSymbol(name));
if(!gphPvt) registryInit(0);
pentry = gphFind(gphPvt,(char *)name,registryID);
if(!pentry) return(0);
return(pentry->userPvt);
}
void registryFree()
{
if(!gphPvt) return;
gphFreeMem(gphPvt);
}
int registryDump(void)
{
if(!gphPvt) return(0);
gphDump(gphPvt);
return(0);
}
+21
View File
@@ -0,0 +1,21 @@
#ifndef INCregistryh
#define INCregistryh
#ifdef __cplusplus
extern "C" {
#endif
#define DEFAULT_TABLE_SIZE 1024
int registryAdd(void *registryID,const char *name,void *data);
void *registryFind(void *registryID,const char *name);
int registrySetTableSize(int size);
void registryFree();
int registryDump(void);
#ifdef __cplusplus
}
#endif
#endif /* INCregistryh */
+31
View File
@@ -0,0 +1,31 @@
/* registryDeviceSupport.c */
/* Author: Marty Kraimer Date: 08JUN99 */
/********************COPYRIGHT NOTIFICATION**********************************
This software was developed under a United States Government license
described on the COPYRIGHT_UniversityOfChicago file included as part
of this distribution.
****************************************************************************/
#include <stddef.h>
#include <stdlib.h>
#include <stddef.h>
#include "registry.h"
#include "dbBase.h"
#include "devSup.h"
#include "registryDeviceSupport.h"
const char *deviceSupport = "device support";
static void *registryID = &deviceSupport;
int registryDeviceSupportAdd(const char *name,struct dset *pdset)
{
return(registryAdd(registryID,name,(void *)pdset));
}
struct dset *registryDeviceSupportFind(const char *name)
{
return((struct dset *)registryFind(registryID,name));
}
+17
View File
@@ -0,0 +1,17 @@
#ifndef INCregistryDeviceSupporth
#define INCregistryDeviceSupporth
#ifdef __cplusplus
extern "C" {
#endif
int registryDeviceSupportAdd(const char *name,struct dset *pdset);
struct dset *registryDeviceSupportFind(const char *name);
#ifdef __cplusplus
}
#endif
#endif /* INCregistryDeviceSupporth */
+31
View File
@@ -0,0 +1,31 @@
/* registryDriverSupport.c */
/* Author: Marty Kraimer Date: 08JUN99 */
/********************COPYRIGHT NOTIFICATION**********************************
This software was developed under a United States Government license
described on the COPYRIGHT_UniversityOfChicago file included as part
of this distribution.
****************************************************************************/
#include <stddef.h>
#include <stdlib.h>
#include <stddef.h>
#include "registry.h"
#include "dbBase.h"
#include "drvSup.h"
#include "registryDriverSupport.h"
const char *driverSupport = "driver support";
static void *registryID = &driverSupport;
int registryDriverSupportAdd(const char *name,struct drvet *pdrvet)
{
return(registryAdd(registryID,name,(void *)pdrvet));
}
struct drvet *registryDriverSupportFind(const char *name)
{
return((struct drvet *)registryFind(registryID,name));
}
+18
View File
@@ -0,0 +1,18 @@
#ifndef INCregistryDriverSupporth
#define INCregistryDriverSupporth
#ifdef __cplusplus
extern "C" {
#endif
/* c interface definitions */
int registryDriverSupportAdd(const char *name,struct drvet *pdrvet);
struct drvet *registryDriverSupportFind(const char *name);
#ifdef __cplusplus
}
#endif
#endif /* INCregistryDriverSupporth */
+30
View File
@@ -0,0 +1,30 @@
/* registryRecordType.c */
/* Author: Marty Kraimer Date: 08JUN99 */
/********************COPYRIGHT NOTIFICATION**********************************
This software was developed under a United States Government license
described on the COPYRIGHT_UniversityOfChicago file included as part
of this distribution.
****************************************************************************/
#include <stddef.h>
#include <stdlib.h>
#include <stddef.h>
#include "registry.h"
#include "dbBase.h"
#include "registryRecordType.h"
const char *recordType = "record type";
static void *registryID = &recordType;
int registryRecordTypeAdd(const char *name,recordTypeLocation *prtl)
{
return(registryAdd(registryID,name,(void *)prtl));
}
recordTypeLocation *registryRecordTypeFind(const char *name)
{
return((recordTypeLocation *)registryFind(registryID,name));
}
+28
View File
@@ -0,0 +1,28 @@
#ifndef INCregistryRecordTypeh
#define INCregistryRecordTypeh
#include "dbStaticLib.h"
typedef int (*computeSizeOffset)(dbRecordType *pdbRecordType);
typedef struct recordTypeLocation {
struct rset *prset;
computeSizeOffset sizeOffset;
}recordTypeLocation;
#ifdef __cplusplus
extern "C" {
#endif
int registryRecordTypeAdd(const char *name,recordTypeLocation *prtl);
recordTypeLocation *registryRecordTypeFind(const char *name);
/* The following function is generated by registerRecordDeviceDriver/pl */
int registerRecordDeviceDriver(DBBASE *pdbbase);
#ifdef __cplusplus
}
#endif
#endif /* INCregistryRecordTypeh */