void dbRegisterFilter(const char *name, const chFilterIf *fif, void *puser) { GPHENTRY *pgph; chFilterPlugin *pfilt; if (!pdbbase) { printf("dbRegisterFilter: pdbbase not set!\n"); return; } pgph = gphFind(pdbbase->pgpHash, name, &pdbbase->filterList); if (pgph) return; pfilt = dbCalloc(1, sizeof(chFilterPlugin)); pfilt->name = epicsStrDup(name); pfilt->fif = fif; pfilt->puser = puser; ellAdd(&pdbbase->filterList, &pfilt->node); pgph = gphAdd(pdbbase->pgpHash, pfilt->name, &pdbbase->filterList); if (!pgph) { free((void *) pfilt->name); free(pfilt); printf("dbRegisterFilter: gphAdd failed\n"); return; } pgph->userPvt = pfilt; }
epicsShareFunc int asynOctetDisconnect(const char *entry) { asynIOPvt *pPvt; asynUser *pasynUser; asynStatus status; GPHENTRY *hashEntry; /* Create hash table if it does not exist */ if (asynHash == NULL) gphInitPvt(&asynHash, 256); if(entry==0) { printf("device name not specified\n"); return -1; } hashEntry = gphFind(asynHash, entry, NULL); if (hashEntry == NULL) { printf("device name not found\n"); return -1; } pPvt = (asynIOPvt *)hashEntry->userPvt; pasynUser = pPvt->pasynUser; status = pasynOctetSyncIO->disconnect(pasynUser); if (status) { printf("disconnect failed %s\n",pasynUser->errorMessage); return(-1); } gphDelete(asynHash,entry,NULL); free(pPvt->write_buffer); free(pPvt->read_buffer); free(pPvt); return(0); }
static void dbDevice(char *recordtype,char *linktype, char *dsetname,char *choicestring) { devSup *pdevSup; dbRecordType *pdbRecordType; GPHENTRY *pgphentry; int i,link_type; pgphentry = gphFind(pdbbase->pgpHash,recordtype,&pdbbase->recordTypeList); if(!pgphentry) { epicsPrintf("Record type \"%s\" not found for device \"%s\"\n", recordtype, choicestring); yyerror(NULL); return; } link_type=-1; for(i=0; i<LINK_NTYPES; i++) { if(strcmp(pamaplinkType[i].strvalue,linktype)==0) { link_type = pamaplinkType[i].value; break; } } if(link_type==-1) { epicsPrintf("Bad link type \"%s\" for device \"%s\"\n", linktype, choicestring); yyerror(NULL); return; } pdbRecordType = (dbRecordType *)pgphentry->userPvt; pgphentry = gphFind(pdbbase->pgpHash,choicestring,&pdbRecordType->devList); if(pgphentry) { return; } pdevSup = dbCalloc(1,sizeof(devSup)); pdevSup->name = epicsStrDup(dsetname); pdevSup->choice = epicsStrDup(choicestring); pdevSup->link_type = link_type; pgphentry = gphAdd(pdbbase->pgpHash,pdevSup->choice,&pdbRecordType->devList); if(!pgphentry) { yyerrorAbort("gphAdd failed"); } else { pgphentry->userPvt = pdevSup; } ellAdd(&pdbRecordType->devList,&pdevSup->node); }
epicsShareFunc int epicsShareAPI registryChange( void *registryID,const char *name,void *data) { GPHENTRY *pentry; if(!gphPvt) registryInit(0); pentry = gphFind(gphPvt,(char *)name,registryID); if(!pentry) return(FALSE); pentry->userPvt = data; return(TRUE); }
static asynIOPvt* asynFindEntry(const char *name) { GPHENTRY *hashEntry; /* Create hash table if it does not exist */ if (asynHash == NULL) gphInitPvt(&asynHash, 256); if(name==0) return NULL; hashEntry = gphFind(asynHash, name, NULL); if (hashEntry == NULL) return (NULL); return((asynIOPvt *)hashEntry->userPvt); }
epicsShareFunc void * epicsShareAPI registryFind( void *registryID,const char *name) { GPHENTRY *pentry; if(name==0) return(0); if(registryID==0) return(epicsFindSymbol(name)); if(!gphPvt) registryInit(0); pentry = gphFind(gphPvt,(char *)name,registryID); if(!pentry) return(0); return(pentry->userPvt); }
static void dbBreakHead(char *name) { brkTable *pbrkTable; GPHENTRY *pgphentry; pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->bptList); if(pgphentry) { duplicate = TRUE; return; } pbrkTable = dbCalloc(1,sizeof(brkTable)); pbrkTable->name = epicsStrDup(name); if(ellCount(&tempList)) yyerrorAbort("dbBreakHead:tempList not empty"); allocTemp(pbrkTable); }
static void dbMenuHead(char *name) { dbMenu *pdbMenu; GPHENTRY *pgphentry; pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->menuList); if(pgphentry) { duplicate = TRUE; return; } if(ellCount(&tempList)) yyerrorAbort("dbMenuHead: tempList not empty"); pdbMenu = dbCalloc(1,sizeof(dbMenu)); pdbMenu->name = epicsStrDup(name); allocTemp(pdbMenu); }
void *sym_table_lookup(const SymTable st, const char *name, void *type) { GPHENTRY *pentry; assert(st.table); pentry = gphFind(st.table, name, type); if (pentry) { assert(pentry->userPvt); /* invariant! */ return pentry->userPvt; } else { return 0; } }
static void dbRecordtypeHead(char *name) { dbRecordType *pdbRecordType; GPHENTRY *pgphentry; pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->recordTypeList); if(pgphentry) { duplicate = TRUE; return; } pdbRecordType = dbCalloc(1,sizeof(dbRecordType)); pdbRecordType->name = epicsStrDup(name); if (pdbbase->loadCdefs) ellInit(&pdbRecordType->cdefList); if(ellCount(&tempList)) yyerrorAbort("dbRecordtypeHead tempList not empty"); allocTemp(pdbRecordType); }
static void dbFunction(char *name) { dbText *ptext; GPHENTRY *pgphentry; pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->functionList); if(pgphentry) { return; } ptext = dbCalloc(1,sizeof(dbText)); ptext->text = epicsStrDup(name); pgphentry = gphAdd(pdbbase->pgpHash,ptext->text,&pdbbase->functionList); if(!pgphentry) { yyerrorAbort("gphAdd failed"); } pgphentry->userPvt = ptext; ellAdd(&pdbbase->functionList,&ptext->node); }
static void dbDriver(char *name) { drvSup *pdrvSup; GPHENTRY *pgphentry; pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->drvList); if(pgphentry) { return; } pdrvSup = dbCalloc(1,sizeof(drvSup)); pdrvSup->name = epicsStrDup(name); pgphentry = gphAdd(pdbbase->pgpHash,pdrvSup->name,&pdbbase->drvList); if(!pgphentry) { yyerrorAbort("gphAdd failed"); } pgphentry->userPvt = pdrvSup; ellAdd(&pdbbase->drvList,&pdrvSup->node); }
static void dbVariable(char *name, char *type) { dbVariableDef *pvar; GPHENTRY *pgphentry; pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->variableList); if(pgphentry) { return; } pvar = dbCalloc(1,sizeof(dbVariableDef)); pvar->name = epicsStrDup(name); pvar->type = epicsStrDup(type); pgphentry = gphAdd(pdbbase->pgpHash,pvar->name,&pdbbase->variableList); if(!pgphentry) { yyerrorAbort("gphAdd failed"); } pgphentry->userPvt = pvar; ellAdd(&pdbbase->variableList,&pvar->node); }