27 #define epicsExportSharedSymbols 32 #include "dbChannel.h" 35 #include "db_field_log.h" 39 static char *pacf=
NULL;
40 static char *psubstitutions=
NULL;
42 static int firstTime =
TRUE;
44 static long asDbAddRecords(
void)
59 if(status)
errMessage(status,
"asDbAddRecords:asAddMember");
75 pacf = calloc(1, strlen(acf)+1);
80 if (*pacf !=
'/' && !strchr(pacf,
':')) {
81 printf(
"asSetFilename: Warning - relative paths won't usually " 93 if(psubstitutions) free ((
void *)psubstitutions);
95 psubstitutions = calloc(1,strlen(substitutions)+1);
97 errMessage(0,
"asSetSubstitutions calloc failure");
99 strcpy(psubstitutions,substitutions);
102 psubstitutions =
NULL;
107 static void asSpcAsCallback(
struct dbCommon *precord)
112 static void asInitCommonOnce(
void *arg)
114 int *firstTime = (
int *)arg;
118 static long asInitCommon(
void)
122 int wasFirstTime = firstTime;
126 epicsThreadOnce(&asInitCommonOnceFlag,asInitCommonOnce,(
void *)&firstTime);
131 printf(
"Access security is NOT enabled." 132 " Was asSetFilename specified before iocInit?\n");
144 dbSpcAsRegisterCallback(asSpcAsCallback);
154 return(asInitCommon());
166 static void wdCallback(
void *arg)
170 callbackRequest(&pcallback->
callback);
178 status = asInitCommon();
183 callbackRequest(&pcallback->
callback);
191 errMessage(-1,
"asInit: asInitTask already active");
194 callbackRequest(&pcallback->
callback);
202 if(asInitTheadId==0) {
203 errMessage(0,
"asInit: epicsThreadCreate Error");
206 callbackRequest(&pcallback->
callback);
215 return dbChannelFldDes(chan)->as_level;
220 return dbChannelRecord(chan)->asp;
228 printf(
"astac callback %s: status=%d",recordname,status);
233 int astac(
const char *
pname,
const char *user,
const char *location)
243 if (!pname || !user || !location){
244 printf(
"Usage: astac \"record name\", \"user\", \"host\"\n");
249 status=dbNameToAddr(pname,paddr);
254 precord = paddr->precord;
255 pflddes = paddr->pfldDes;
258 plocation =
asCalloc(1,strlen(location)+1);
259 strcpy(plocation,location);
262 (
int)pflddes->
as_level,puser,plocation);
273 static void myMemberCallback(
ASMEMBERPVT memPvt,FILE *fp)
278 if(precord) fprintf(fp,
" Record:%s",precord->name);
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
long dbFirstRecordType(DBENTRY *pdbentry)
void taskwdInsert(epicsThreadId tid, TASKWDFUNC callback, void *usr)
LIBCOM_API long epicsStdCall asChangeGroup(ASMEMBERPVT *asMemberPvt, const char *newAsgName)
int aspmem(const char *asgname, int clients)
LIBCOM_API long epicsStdCall asInitFile(const char *filename, const char *substitutions)
LIBCOM_API int epicsStdCall asDumpHagFP(FILE *fp, const char *hagname)
#define asCheckPut(asClientPvt)
#define asCheckGet(asClientPvt)
LIBCOM_API volatile ASBASE * pasbase
LIBCOM_API long epicsStdCall asAddClient(ASCLIENTPVT *asClientPvt, ASMEMBERPVT asMemberPvt, int asl, const char *user, char *host)
int asInitAsyn(ASDBCALLBACK *pcallback)
LIBCOM_API long epicsStdCall asRegisterClientCallback(ASCLIENTPVT asClientPvt, ASCLIENTCALLBACK pcallback)
void dbFinishEntry(DBENTRY *pdbentry)
int asphagFP(FILE *fp, const char *hagname)
LIBCOM_API void epicsStdCall asPutClientPvt(ASCLIENTPVT asClientPvt, void *userPvt)
#define errMessage(S, PM)
int asphag(const char *hagname)
LIBCOM_API int epicsStdCall asDumpFP(FILE *fp, void(*memcallback)(ASMEMBERPVT, FILE *), void(*clientcallback)(ASCLIENTPVT, FILE *), int verbose)
long dbNextRecordType(DBENTRY *pdbentry)
Miscellaneous macro definitions.
LIBCOM_API unsigned int epicsStdCall epicsThreadGetStackSize(epicsThreadStackSizeClass size)
long dbNextRecord(DBENTRY *pdbentry)
int asSetSubstitutions(const char *substitutions)
epicsThreadId epicsStdCall epicsThreadCreate(const char *name, unsigned int priority, unsigned int stackSize, EPICSTHREADFUNC funptr, void *parm)
int aspuag(const char *uagname)
#define S_asLib_InitFailed
LIBCOM_API void *epicsStdCall asGetMemberPvt(ASMEMBERPVT asMemberPvt)
#define EPICS_THREAD_ONCE_INIT
LIBCOM_API void epicsStdCall epicsThreadOnce(epicsThreadOnceId *id, EPICSTHREADFUNC, void *arg)
LIBCOM_API int epicsStdCall asDumpRulesFP(FILE *fp, const char *asgname)
ChannelProviderRegistry::shared_pointer clients
int asprules(const char *asgname)
LIBCOM_API void *epicsStdCall asGetClientPvt(ASCLIENTPVT asClientPvt)
LIBCOM_API int epicsStdCall asDumpMemFP(FILE *fp, const char *asgname, void(*memcallback)(ASMEMBERPVT, FILE *), int clients)
int aspmemFP(FILE *fp, const char *asgname, int clients)
int astac(const char *pname, const char *user, const char *location)
#define epicsThreadPriorityCAServerHigh
void taskwdRemove(epicsThreadId tid)
void * asDbGetMemberPvt(struct dbChannel *chan)
#define dbCalloc(nobj, size)
int asDbGetAsl(struct dbChannel *chan)
int aspuagFP(FILE *fp, const char *uagname)
long dbFirstRecord(DBENTRY *pdbentry)
LIBCOM_API long epicsStdCall asAddMember(ASMEMBERPVT *asMemberPvt, const char *asgName)
LIBCOM_API void *epicsStdCall asCalloc(size_t nobj, size_t size)
Routines for code that can't continue or return after an error.
int asprulesFP(FILE *fp, const char *asgname)
C++ and C descriptions for a thread.
int asSetFilename(const char *acf)
LIBCOM_API void epicsStdCall asPutMemberPvt(ASMEMBERPVT asMemberPvt, void *userPvt)
LIBCOM_API int epicsStdCall asDumpUagFP(FILE *fp, const char *uagname)
void(* EPICSTHREADFUNC)(void *parm)
#define S_asLib_asNotActive
LIBCOM_API void asFreeAll(ASBASE *pasbase)
LIBCOM_API epicsThreadId epicsStdCall epicsThreadGetIdSelf(void)
#define S_asLib_badConfig