static void dbRecordField(char *name,char *value) { DBENTRY *pdbentry; tempListNode *ptempListNode; long status; if(duplicate) return; ptempListNode = (tempListNode *)ellFirst(&tempList); pdbentry = ptempListNode->item; status = dbFindField(pdbentry,name); if(status) { epicsPrintf("Record \"%s\" does not have a field \"%s\"\n", dbGetRecordName(pdbentry), name); yyerror(NULL); return; } dbTranslateEscape(value, value); /* yuck: in-place, but safe */ status = dbPutString(pdbentry,value); if(status) { epicsPrintf("Can't set \"%s.%s\" to \"%s\"\n", dbGetRecordName(pdbentry), name, value); yyerror(NULL); return; } }
LOCAL void queueAllRecords () { DBENTRY dbentry; DBENTRY *pdbentry=&dbentry; dbCommon *pdbc; long status; dbInitEntry(pdbbase,pdbentry); status = dbFirstRecordType(pdbentry); while(!status) { status = dbFirstRecord(pdbentry); while(!status) { msg_t msg; pdbc = pdbentry->precnode->precord; DEBUG2(4,"queueAllRecords:Name: %s ptr: 0x%x\n", dbGetRecordName(pdbentry),(unsigned)pdbc) msg.pdbc = pdbc; msg.osevr = pdbc->sevr; msg.ostat = pdbc->stat; msg.nsevr = pdbc->sevr; msg.nstat = pdbc->stat; tsLocalTime (&msg.stamp); msg.msgType = mt_Status; ringInsert (&msg); status = dbNextRecord(pdbentry); } status = dbNextRecordType(pdbentry); } dbFinishEntry(pdbentry); }
ChannelFind::shared_pointer DbPvProvider::channelList( ChannelListRequester::shared_pointer const & channelListRequester) { PVStringArray::svector channelNames; DBENTRY dbentry; DBENTRY *pdbentry=&dbentry; if (pdbbase) { dbInitEntry(pdbbase, pdbentry); long status = dbFirstRecordType(pdbentry); if (!status) { while (!status) { status = dbFirstRecord(pdbentry); while (!status) { channelNames.push_back(dbGetRecordName(pdbentry)); status = dbNextRecord(pdbentry); } status = dbNextRecordType(pdbentry); } } dbFinishEntry(pdbentry); } ChannelFind::shared_pointer nullChannelFind; channelListRequester->channelListResult(Status::Ok, nullChannelFind, freeze(channelNames), false); return nullChannelFind; }
long epicsShareAPI dbgrep(const char *pmask) { DBENTRY dbentry; DBENTRY *pdbentry = &dbentry; long status; if (!pmask || !*pmask) { printf("Usage: dbgrep \"pattern\"\n"); return 1; } if (!pdbbase) { printf("No database loaded\n"); return 0; } dbInitEntry(pdbbase, pdbentry); status = dbFirstRecordType(pdbentry); while (!status) { status = dbFirstRecord(pdbentry); while (!status) { char *pname = dbGetRecordName(pdbentry); if (epicsStrGlobMatch(pname, pmask)) puts(pname); status = dbNextRecord(pdbentry); } status = dbNextRecordType(pdbentry); } dbFinishEntry(pdbentry); return 0; }
long epicsShareAPI dbla(const char *pmask) { DBENTRY dbentry; DBENTRY *pdbentry = &dbentry; long status; if (!pdbbase) { printf("No database loaded\n"); return 0; } dbInitEntry(pdbbase, pdbentry); status = dbFirstRecordType(pdbentry); while (!status) { for (status = dbFirstRecord(pdbentry); !status; status = dbNextRecord(pdbentry)) { char *palias; if (!dbIsAlias(pdbentry)) continue; palias = dbGetRecordName(pdbentry); if (pmask && *pmask && !epicsStrGlobMatch(palias, pmask)) continue; dbFindField(pdbentry, "NAME"); printf("%s -> %s\n", palias, dbGetString(pdbentry)); } status = dbNextRecordType(pdbentry); } dbFinishEntry(pdbentry); return 0; }
static void dbRecordAlias(char *name) { DBENTRY *pdbentry; tempListNode *ptempListNode; long status; if(duplicate) return; ptempListNode = (tempListNode *)ellFirst(&tempList); pdbentry = ptempListNode->item; status = dbCreateAlias(pdbentry, name); if(status) { epicsPrintf("Can't create alias \"%s\" for \"%s\"\n", name, dbGetRecordName(pdbentry)); yyerror(NULL); return; } }
static void dbRecordInfo(char *name, char *value) { DBENTRY *pdbentry; tempListNode *ptempListNode; long status; if(duplicate) return; ptempListNode = (tempListNode *)ellFirst(&tempList); pdbentry = ptempListNode->item; status = dbPutInfo(pdbentry,name,value); if(status) { epicsPrintf("Can't set \"%s\" info \"%s\" to \"%s\"\n", dbGetRecordName(pdbentry), name, value); yyerror(NULL); return; } }
long dbcar(char *precordname, int level) { DBENTRY dbentry; DBENTRY *pdbentry=&dbentry; long status; dbCommon *precord; dbRecordType *pdbRecordType; dbFldDes *pdbFldDes; DBLINK *plink; int ncalinks=0; int nconnected=0; int noReadAccess=0; int noWriteAccess=0; unsigned long nDisconnect=0; unsigned long nNoWrite=0; caLink *pca; int j; if (!precordname || precordname[0] == '\0' || !strcmp(precordname, "*")) { precordname = NULL; printf("CA links in all records\n\n"); } else { printf("CA links in record named '%s'\n\n", precordname); } dbInitEntry(pdbbase,pdbentry); status = dbFirstRecordType(pdbentry); while (!status) { status = dbFirstRecord(pdbentry); while (!status) { if (precordname ? !strcmp(precordname, dbGetRecordName(pdbentry)) : !dbIsAlias(pdbentry)) { pdbRecordType = pdbentry->precordType; precord = (dbCommon *)pdbentry->precnode->precord; for (j=0; j<pdbRecordType->no_links; j++) { pdbFldDes = pdbRecordType->papFldDes[pdbRecordType->link_ind[j]]; plink = (DBLINK *)((char *)precord + pdbFldDes->offset); dbLockSetGblLock(); if (plink->type == CA_LINK) { ncalinks++; pca = (caLink *)plink->value.pv_link.pvt; if (pca && pca->chid && (ca_field_type(pca->chid) != TYPENOTCONN)) { nconnected++; nDisconnect += pca->nDisconnect; nNoWrite += pca->nNoWrite; if (!ca_read_access(pca->chid)) noReadAccess++; if (!ca_write_access(pca->chid)) noWriteAccess++; if (level>1) { int rw = ca_read_access(pca->chid) | ca_write_access(pca->chid) << 1; static const char *rights[4] = { "No Access", "Read Only", "Write Only", "Read/Write" }; int mask = plink->value.pv_link.pvlMask; printf("%28s.%-4s ==> %-28s (%lu, %lu)\n", precord->name, pdbFldDes->name, plink->value.pv_link.pvname, pca->nDisconnect, pca->nNoWrite); printf("%21s [%s%s%s%s] host %s, %s\n", "", mask & pvlOptInpNative ? "IN" : " ", mask & pvlOptInpString ? "IS" : " ", mask & pvlOptOutNative ? "ON" : " ", mask & pvlOptOutString ? "OS" : " ", ca_host_name(pca->chid), rights[rw]); } } else { if (level>0) { printf("%28s.%-4s --> %-28s (%lu, %lu)\n", precord->name, pdbFldDes->name, plink->value.pv_link.pvname, pca->nDisconnect, pca->nNoWrite); } } } dbLockSetGblUnlock(); } if (precordname) goto done; } status = dbNextRecord(pdbentry); } status = dbNextRecordType(pdbentry); } done: if ((level > 1 && nconnected > 0) || (level > 0 && ncalinks != nconnected)) printf("\n"); printf("Total %d CA link%s; ", ncalinks, (ncalinks != 1) ? "s" : ""); printf("%d connected, %d not connected.\n", nconnected, (ncalinks - nconnected)); printf(" %d can't read, %d can't write.", noReadAccess, noWriteAccess); printf(" (%lu disconnects, %lu writes prohibited)\n\n", nDisconnect, nNoWrite); dbFinishEntry(pdbentry); if ( level > 2 && dbCaClientContext != 0 ) { ca_context_status ( dbCaClientContext, level - 2 ); } return(0); }
long epicsShareAPI dbl(const char *precordTypename, const char *fields) { DBENTRY dbentry; DBENTRY *pdbentry=&dbentry; long status; int nfields = 0; int ifield; char *fieldnames = 0; char **papfields = 0; if (!pdbbase) { printf("No database loaded\n"); return 0; } if (precordTypename && ((*precordTypename == '\0') || !strcmp(precordTypename,"*"))) precordTypename = NULL; if (fields && (*fields == '\0')) fields = NULL; if (fields) { char *pnext; fieldnames = epicsStrDup(fields); nfields = 1; pnext = fieldnames; while (*pnext && (pnext = strchr(pnext,' '))) { nfields++; while (*pnext == ' ') pnext++; } papfields = dbCalloc(nfields,sizeof(char *)); pnext = fieldnames; for (ifield = 0; ifield < nfields; ifield++) { papfields[ifield] = pnext; if (ifield < nfields - 1) { pnext = strchr(pnext, ' '); *pnext++ = 0; while (*pnext == ' ') pnext++; } } } dbInitEntry(pdbbase, pdbentry); if (!precordTypename) status = dbFirstRecordType(pdbentry); else status = dbFindRecordType(pdbentry,precordTypename); if (status) { printf("No record type\n"); } while (!status) { status = dbFirstRecord(pdbentry); while (!status) { printf("%s", dbGetRecordName(pdbentry)); for (ifield = 0; ifield < nfields; ifield++) { char *pvalue; status = dbFindField(pdbentry, papfields[ifield]); if (status) { if (!strcmp(papfields[ifield], "recordType")) { pvalue = dbGetRecordTypeName(pdbentry); } else { printf(", "); continue; } } else { pvalue = dbGetString(pdbentry); } printf(", \"%s\"", pvalue ? pvalue : ""); } printf("\n"); status = dbNextRecord(pdbentry); } if (precordTypename) break; status = dbNextRecordType(pdbentry); } if (nfields > 0) { free((void *)papfields); free((void *)fieldnames); } dbFinishEntry(pdbentry); return 0; }