diff --git a/modules/libcom/src/as/asLib.h b/modules/libcom/src/as/asLib.h index 95fed7a9a..261e5ed7d 100644 --- a/modules/libcom/src/as/asLib.h +++ b/modules/libcom/src/as/asLib.h @@ -66,6 +66,7 @@ epicsShareFunc long epicsShareAPI asInitialize(ASINPUTFUNCPTR inputfunction); epicsShareFunc long epicsShareAPI asInitFile( const char *filename,const char *substitutions); epicsShareFunc long epicsShareAPI asInitFP(FILE *fp,const char *substitutions); +epicsShareFunc long epicsShareAPI asInitMem(const char *acf, const char *substitutions); /*caller must provide permanent storage for asgName*/ epicsShareFunc long epicsShareAPI asAddMember( ASMEMBERPVT *asMemberPvt,const char *asgName); diff --git a/modules/libcom/src/as/asLibRoutines.c b/modules/libcom/src/as/asLibRoutines.c index e7f1d90bf..3f5713efc 100644 --- a/modules/libcom/src/as/asLibRoutines.c +++ b/modules/libcom/src/as/asLibRoutines.c @@ -250,7 +250,35 @@ long epicsShareAPI asInitFP(FILE *fp,const char *substitutions) } return(status); } - + +static const char* membuf; + +static int memInputFunction(char *buf, int max_size) +{ + int ret = 0; + if(!membuf) return ret; + + while(max_size && *membuf) { + *buf++ = *membuf++; + max_size--; + ret++; + } + + return ret; +} + +long epicsShareAPI asInitMem(const char *acf, const char *substitutions) +{ + long ret = S_asLib_InitFailed; + if(!acf) return ret; + + membuf = acf; + ret = asInitialize(&memInputFunction); + membuf = NULL; + + return ret; +} + long epicsShareAPI asAddMember(ASMEMBERPVT *pasMemberPvt,const char *asgName) { long status;