diff --git a/src/ioc/dbStatic/dbStaticLib.c b/src/ioc/dbStatic/dbStaticLib.c index 80b02e5e3..5d7863052 100644 --- a/src/ioc/dbStatic/dbStaticLib.c +++ b/src/ioc/dbStatic/dbStaticLib.c @@ -79,127 +79,12 @@ static int mapDBFtoDCT[DBF_NOACCESS+1] = { DCT_INLINK,DCT_OUTLINK,DCT_FWDLINK, DCT_NOACCESS}; -struct form { - DBLINK *plink; - int linkType; - int nlines; - char **prompt; - char **value; - char **verify; -}; - -static char *promptCONSTANT[] = { - "Constant:"}; -static char *promptINLINK[] = { - " PV Name:", - "NPP PP CA CP CPP:", - " NMS MS MSI MSS:"}; -static char *promptOUTLINK[] = { - " PV Name:", - "NPP PP CA:", - "NMS or MS:"}; -static char *promptFWDLINK[] = { - " PV Name:", - " CA:"}; -static char *promptVME_IO[] = { - " card:", - "signal:", - " parm:"}; -static char *promptCAMAC_IO[] = { - " branch:", - " crate:", - " station:", - "subaddress:", - " function:", - " parameter:"}; -static char *promptAB_IO[] = { - " link:", - " adapter:", - " card:", - " signal:", - " parm:"}; -static char *promptGPIB_IO[] = { - "link:", - "addr:", - "parm:"}; -static char *promptBITBUS_IO[] = { - " link:", - " node:", - " port:", - "signal:", - " parm:"}; -static char *promptINST_IO[] = { - "parm:"}; -static char *promptBBGPIB_IO[] = { - " link:", - " bbaddr:", - "gpibaddr:", - " parm:"}; -static char *promptRF_IO[] = { - " cryo:", - " micro:", - " dataset:", - " element:"}; -static char *promptVXI_IO[] = { - " Dynamic?", - "DYN frame:", - "DYN slot:", - "STATIC la:", - " Signal:", - " parm:"}; - -/*Each DBF link type is separate case*/ -#define FORM_CONSTANT 0 -#define FORM_INLINK 1 -#define FORM_OUTLINK 2 -#define FORM_FWDLINK 3 -#define FORM_VME_IO 4 -#define FORM_CAMAC_IO 5 -#define FORM_AB_IO 6 -#define FORM_GPIB_IO 7 -#define FORM_BITBUS_IO 8 -#define FORM_INST_IO 9 -#define FORM_BBGPIB_IO 10 -#define FORM_RF_IO 11 -#define FORM_VXI_IO 12 -#define FORM_NTYPES (FORM_VXI_IO + 1) - -static char **promptAddr[FORM_NTYPES] = { -promptCONSTANT, -promptINLINK, -promptOUTLINK, -promptFWDLINK, -promptVME_IO, -promptCAMAC_IO, -promptAB_IO, -promptGPIB_IO, -promptBITBUS_IO, -promptINST_IO, -promptBBGPIB_IO, -promptRF_IO, -promptVXI_IO}; - -static int formlines[FORM_NTYPES] = { -sizeof(promptCONSTANT)/sizeof(char *), -sizeof(promptINLINK)/sizeof(char *), -sizeof(promptOUTLINK)/sizeof(char *), -sizeof(promptFWDLINK)/sizeof(char *), -sizeof(promptVME_IO)/sizeof(char *), -sizeof(promptCAMAC_IO)/sizeof(char *), -sizeof(promptAB_IO)/sizeof(char *), -sizeof(promptGPIB_IO)/sizeof(char *), -sizeof(promptBITBUS_IO)/sizeof(char *), -sizeof(promptINST_IO)/sizeof(char *), -sizeof(promptBBGPIB_IO)/sizeof(char *), -sizeof(promptRF_IO)/sizeof(char *), -sizeof(promptVXI_IO)/sizeof(char *)}; /*forward references for private routines*/ static FILE *openOutstream(const char *filename); static void finishOutstream(FILE *stream); static long setLinkType(DBENTRY *pdbentry); static long putParmString(char **pparm,const char *pstring); -static long mapLINKTtoFORMT(DBLINK *plink,dbFldDes *pflddes,int *ind); static void entryErrMessage(DBENTRY *pdbentry,long status,char *mess); static void zeroDbentry(DBENTRY *pdbentry); static char *getpMessage(DBENTRY *pdbentry); @@ -368,47 +253,6 @@ void dbFreePath(DBBASE *pdbbase) } -static long mapLINKTtoFORMT(DBLINK *plink,dbFldDes *pflddes,int *ind) -{ - switch(plink->type) { - case CONSTANT: - *ind = FORM_CONSTANT; return(0); - case PV_LINK: - switch(pflddes->field_type) { - case DBF_INLINK: - *ind = FORM_INLINK; return(0); - case DBF_OUTLINK: - *ind = FORM_OUTLINK; return(0); - case DBF_FWDLINK: - *ind = FORM_FWDLINK; return(0); - default: - break; - } - break; - case VME_IO: - *ind = FORM_VME_IO; return(0); - case CAMAC_IO: - *ind = FORM_CAMAC_IO; return(0); - case AB_IO: - *ind = FORM_AB_IO; return(0); - case GPIB_IO: - *ind = FORM_GPIB_IO; return(0); - case BITBUS_IO: - *ind = FORM_BITBUS_IO; return(0); - case INST_IO: - *ind = FORM_INST_IO; return(0); - case BBGPIB_IO: - *ind = FORM_BBGPIB_IO; return(0); - case RF_IO: - *ind = FORM_RF_IO; return(0); - case VXI_IO: - *ind = FORM_VXI_IO; return(0); - default: - break; - } - return(S_dbLib_badLink); -} - static void entryErrMessage(DBENTRY *pdbentry,long status,char *mess) { char message[200]; @@ -443,7 +287,7 @@ static void entryErrMessage(DBENTRY *pdbentry,long status,char *mess) static void zeroDbentry(DBENTRY *pdbentry) { - /*NOTE that pdbbase, message, and formpvt MUST NOT be set to NULL*/ + /*NOTE that pdbbase and message MUST NOT be set to NULL*/ pdbentry->precordType=NULL; pdbentry->pflddes=NULL; pdbentry->precnode=NULL; @@ -757,7 +601,6 @@ DBENTRY * dbAllocEntry(dbBase *pdbbase) void dbFreeEntry(DBENTRY *pdbentry) { if(pdbentry->message) free((void *)pdbentry->message); - if(pdbentry->formpvt) dbFreeForm(pdbentry); dbmfFree(pdbentry); } @@ -773,7 +616,6 @@ void dbFinishEntry(DBENTRY *pdbentry) free((void *)pdbentry->message); pdbentry->message = NULL; } - if(pdbentry->formpvt) dbFreeForm(pdbentry); } DBENTRY * dbCopyEntry(DBENTRY *pdbentry) @@ -783,7 +625,6 @@ DBENTRY * dbCopyEntry(DBENTRY *pdbentry) pnew = dbAllocEntry(pdbentry->pdbbase); *pnew = *pdbentry; pnew->message = NULL; - pnew->formpvt = NULL; return(pnew); } @@ -791,7 +632,6 @@ void dbCopyEntryContents(DBENTRY *pfrom,DBENTRY *pto) { *pto = *pfrom; pto->message = NULL; - pto->formpvt = NULL; } @@ -3017,648 +2857,6 @@ drvSup * dbFindDriver(dbBase *pdbbase, const char *name) { return (drvSup *) pgph->userPvt; } -int dbAllocForm(DBENTRY *psave) -{ - DBENTRY dbEntry; - DBENTRY *pdbentry= &dbEntry; - dbFldDes *pflddes; - DBLINK *plink; - int nlines=0; - char *pstr; - struct form *pform; - int linkType; - long status = 0; - int nbytes,i; - - if(psave->formpvt) { - status = dbFreeForm(psave); - if(status) return(status); - } - dbCopyEntryContents(psave,pdbentry); - pflddes = pdbentry->pflddes; - if(!pflddes) { - epicsPrintf("dbAllocForm called but no field is referenced\n"); - goto done; - } - if(pflddes->field_type == DBF_DEVICE) { - status = dbFindField(pdbentry,"INP"); - if(status) status = dbFindField(pdbentry,"OUT"); - if(status) goto done; - pflddes = pdbentry->pflddes; - } else { - if((pflddes->field_type!=DBF_INLINK) - && (pflddes->field_type!=DBF_OUTLINK) - && (pflddes->field_type!=DBF_FWDLINK)) { - epicsPrintf("dbAllocForm called but not DBF_DEVICE or DBF_xxxLINK\n"); - goto done; - } - plink = (DBLINK *)(pdbentry->pfield); - if(plink->type==MACRO_LINK) goto done; - if(strcmp(pflddes->name,"INP")==0 || strcmp(pflddes->name,"OUT")==0){ - status = setLinkType(pdbentry); - if(status) { - errMessage(status,"in dbAllocForm from setLinkType"); - return(0); - } - } - } - plink = (DBLINK *)(pdbentry->pfield); - if(plink->type==MACRO_LINK) goto done; - status = mapLINKTtoFORMT(plink,pflddes,&linkType); - if(status) goto done; - nlines = formlines[linkType]; - /*Dont know how to handle string size. Just use messagesize*/ - nbytes = sizeof(struct form) + 2*nlines*(sizeof(char *) + messagesize); - pform = dbCalloc(1,nbytes); - pform->nlines = nlines; - pform->linkType = linkType; - psave->formpvt = pform; - pform->plink = plink ; - pform->prompt = promptAddr[linkType]; - pform->value = (char **)((char *)pform + sizeof(struct form)); - pform->verify = (char **)((char *)(pform->value)+nlines*sizeof(char *)); - pstr = (char *)(pform->verify) + nlines*sizeof(char *); - for(i=0; ivalue[i] = pstr; - pstr += messagesize; - } - for(i=0; iverify[i] = pstr; - pstr += messagesize; - } -done: - dbFinishEntry(pdbentry); - return(nlines); -} - -long dbFreeForm(DBENTRY *pdbentry) -{ - if(pdbentry->formpvt) { - free(pdbentry->formpvt); - pdbentry->formpvt = NULL; - } - return(0); -} - -char ** dbGetFormPrompt(DBENTRY *pdbentry) -{ - struct form *pform = pdbentry->formpvt; - - if(!pform) return(NULL); - return(pform->prompt); -} - -char ** dbGetFormValue(DBENTRY *pdbentry) -{ - struct form *pform = pdbentry->formpvt; - DBLINK *plink; - char **value; - - if(!pform) return(NULL); - plink = pform->plink; - if(!plink) return(NULL); - value = pform->value; - switch(pform->linkType) { - case FORM_CONSTANT: - if(plink->value.constantStr) { - strcpy(*value,plink->value.constantStr); - } else { - strcpy(*value,""); - } - break; - case FORM_INLINK: { - short pvlMask = plink->value.pv_link.pvlMask; - - if(plink->value.pv_link.pvname) - strcpy(*value,plink->value.pv_link.pvname); - else - strcpy(*value,""); - value++; - if(pvlMask&pvlOptPP) strcpy(*value,"PP"); - else if(pvlMask&pvlOptCA) strcpy(*value,"CA"); - else if(pvlMask&pvlOptCP) strcpy(*value,"CP"); - else if(pvlMask&pvlOptCPP) strcpy(*value,"CPP"); - else strcpy(*value,"NPP"); - value++; - strcpy(*value, msstring[pvlMask&pvlOptMsMode]); - value++; - } - break; - case FORM_OUTLINK: { - short pvlMask = plink->value.pv_link.pvlMask; - - if(plink->value.pv_link.pvname) - strcpy(*value,plink->value.pv_link.pvname); - else - strcpy(*value,""); - value++; - if(pvlMask&pvlOptPP) strcpy(*value,"PP"); - else if(pvlMask&pvlOptCA) strcpy(*value,"CA"); - else strcpy(*value,"NPP"); - value++; - strcpy(*value, msstring[pvlMask&pvlOptMsMode]); - value++; - } - break; - case FORM_FWDLINK: { - short pvlMask = plink->value.pv_link.pvlMask; - - if(plink->value.pv_link.pvname) - strcpy(*value,plink->value.pv_link.pvname); - else - strcpy(*value,""); - value++; - if(pvlMask&pvlOptCA) strcpy(*value,"CA"); - else strcpy(*value,""); - } - break; - case FORM_VME_IO: - cvtShortToString(plink->value.vmeio.card,*value); - value++; - cvtShortToString(plink->value.vmeio.signal,*value); - value++; - strcpy(*value,"@"); - strcat(*value,plink->value.vmeio.parm); - break; - case FORM_CAMAC_IO: - cvtShortToString(plink->value.camacio.b,*value); - value++; - cvtShortToString(plink->value.camacio.c,*value); - value++; - cvtShortToString(plink->value.camacio.n,*value); - value++; - cvtShortToString(plink->value.camacio.a,*value); - value++; - cvtShortToString(plink->value.camacio.f,*value); - value++; - strcpy(*value,"@"); - strcat(*value,plink->value.camacio.parm); - break; - case FORM_RF_IO: - cvtShortToString(plink->value.rfio.cryo,*value); - value++; - cvtShortToString(plink->value.rfio.micro,*value); - value++; - cvtShortToString(plink->value.rfio.dataset,*value); - value++; - cvtShortToString(plink->value.rfio.element,*value); - break; - case FORM_AB_IO: - cvtShortToString(plink->value.abio.link,*value); - value++; - cvtShortToString(plink->value.abio.adapter,*value); - value++; - cvtShortToString(plink->value.abio.card,*value); - value++; - cvtShortToString(plink->value.abio.signal,*value); - value++; - strcpy(*value,"@"); - strcat(*value,plink->value.abio.parm); - break; - case FORM_GPIB_IO: - cvtShortToString(plink->value.gpibio.link,*value); - value++; - cvtShortToString(plink->value.gpibio.addr,*value); - value++; - strcpy(*value,"@"); - strcat(*value,plink->value.gpibio.parm); - break; - case FORM_BITBUS_IO: - cvtCharToString(plink->value.bitbusio.link,*value); - value++; - cvtCharToString(plink->value.bitbusio.node,*value); - value++; - cvtCharToString(plink->value.bitbusio.port,*value); - value++; - cvtCharToString(plink->value.bitbusio.signal,*value); - value++; - strcpy(*value,"@"); - strcat(*value,plink->value.bitbusio.parm); - break; - case FORM_INST_IO: - strcpy(*value,"@"); - strcat(*value,plink->value.instio.string); - break; - case FORM_BBGPIB_IO: - cvtCharToString(plink->value.bbgpibio.link,*value); - value++; - cvtCharToString(plink->value.bbgpibio.bbaddr,*value); - value++; - cvtCharToString(plink->value.bbgpibio.gpibaddr,*value); - value++; - strcpy(*value,"@"); - strcat(*value,plink->value.bbgpibio.parm); - break; - case FORM_VXI_IO: - strcpy(*value,(plink->value.vxiio.flag == VXIDYNAMIC ? "Yes" : "No")); - value++; - if(plink->value.vxiio.flag == VXIDYNAMIC) - cvtShortToString(plink->value.vxiio.frame,*value); - else - **value = 0; - value++; - if(plink->value.vxiio.flag == VXIDYNAMIC) - cvtShortToString(plink->value.vxiio.slot,*value); - else - **value = 0; - value++; - if(plink->value.vxiio.flag == VXISTATIC) - cvtShortToString(plink->value.vxiio.la,*value); - else - **value = 0; - value++; - cvtShortToString(plink->value.vxiio.signal,*value); - value++; - strcpy(*value,"@"); - strcat(*value,plink->value.vxiio.parm); - break; - default : - return(NULL); - } - return(pform->value); -} - -long dbPutForm(DBENTRY *pdbentry,char **value) -{ - struct form *pform = pdbentry->formpvt; - DBLINK *plink; - char **verify; - long lvalue; - char *endp; - long status = 0; - - if(!pform) return(S_dbLib_badLink); - plink = pform->plink; - if(!plink) return(S_dbLib_badLink); - verify = pform->verify; - switch(pform->linkType) { - case FORM_CONSTANT: - **verify = 0; /*Initialize to no error*/ - if(**value == '\0') break; - (void) epicsStrtod(*value,&endp); - if(*endp!=0) { - strcpy(*verify,"Illegal. Must be number"); - break; - } - if((!plink->value.constantStr) - || ((int)strlen(plink->value.constantStr)<(int)strlen(*value))) { - free(plink->value.constantStr); - plink->value.constantStr = dbCalloc(strlen(*value)+1,sizeof(char)); - } - strcpy(plink->value.constantStr,*value); - break; - case FORM_INLINK: { - DBENTRY dbEntry; - DBENTRY *plinkentry = &dbEntry; - short ppOpt = 0; - short msOpt = 0; - const char *pstr; - - pstr = *value; - **verify = 0; - value++; verify++; - **verify = 0; /*Initialize verify to NULL*/ - if((*value==NULL) || (strcmp(*value,"")==0)) ppOpt = 0; - else if(strstr(*value,"NPP")) ppOpt = 0; - else if(strstr(*value,"CPP")) ppOpt = pvlOptCPP; - else if(strstr(*value,"PP")) ppOpt = pvlOptPP; - else if(strstr(*value,"CA")) ppOpt = pvlOptCA; - else if(strstr(*value,"CP")) ppOpt = pvlOptCP; - else strcpy(*verify,"Illegal. Chose a value"); - value++; verify++; - **verify = 0; /*Initialize verify to NULL*/ - if((*value==NULL) || (strcmp(*value,"")==0)) msOpt = 0; - else if(strstr(*value,"NMS")) msOpt = pvlOptNMS; - else if(strstr(*value,"MSI")) msOpt = pvlOptMSI; - else if(strstr(*value,"MSS")) msOpt = pvlOptMSS; - /*must be the last one:*/ - else if(strstr(*value,"MS")) msOpt = pvlOptMS; - else strcpy(*verify,"Illegal. Chose a value"); - dbCopyEntryContents(pdbentry,plinkentry); - if(pdbentry->pflddes->field_type == DBF_DEVICE) { - status = dbFindField(plinkentry,"INP"); - if(status) { - dbFinishEntry(plinkentry); - return(status); - } - } - putPvLink(plinkentry,ppOpt|msOpt,pstr); - dbFinishEntry(plinkentry); - } - break; - case FORM_OUTLINK: { - DBENTRY dbEntry; - DBENTRY *plinkentry = &dbEntry; - short ppOpt = 0; - short msOpt = 0; - const char *pstr; - - pstr = *value; - **verify = 0; - value++; verify++; - **verify = 0; /*Initialize verify to NULL*/ - if((*value==NULL) || (strcmp(*value,"")==0)) ppOpt = 0; - else if(strstr(*value,"NPP")) ppOpt = 0; - else if(strstr(*value,"PP")) ppOpt = pvlOptPP; - else if(strstr(*value,"CA")) ppOpt = pvlOptCA; - else strcpy(*verify,"Illegal. Chose a value"); - value++; verify++; - **verify = 0; /*Initialize verify to NULL*/ - if((*value==NULL) || (strcmp(*value,"")==0)) msOpt = 0; - else if(strstr(*value,"NMS")) msOpt = pvlOptNMS; - else if(strstr(*value,"MSI")) msOpt = pvlOptMSI; - else if(strstr(*value,"MSS")) msOpt = pvlOptMSS; - /*must be the last one:*/ - else if(strstr(*value,"MS")) msOpt = pvlOptMS; - else strcpy(*verify,"Illegal. Chose a value"); - dbCopyEntryContents(pdbentry,plinkentry); - if(pdbentry->pflddes->field_type == DBF_DEVICE) { - status = dbFindField(plinkentry,"OUT"); - if(status) { - dbFinishEntry(plinkentry); - return(status); - } - } - putPvLink(plinkentry,ppOpt|msOpt,pstr); - dbFinishEntry(plinkentry); - } - break; - case FORM_FWDLINK: { - short ppOpt = 0; - short msOpt = 0; - const char *pstr; - - pstr = *value; - **verify = 0; - value++; verify++; - **verify = 0; /*Initialize verify to NULL*/ - if((*value==NULL) || (strcmp(*value,"")==0)) ppOpt = 0; - else if(strstr(*value,"CA")) ppOpt = pvlOptCA; - else strcpy(*verify,"Illegal. Chose a value"); - putPvLink(pdbentry,ppOpt|msOpt,pstr); - } - break; - case FORM_VME_IO: - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.vmeio.card = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.vmeio.signal = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - status = putParmString(&plink->value.vmeio.parm,*value); - break; - case FORM_CAMAC_IO: - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.camacio.b = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.camacio.c = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.camacio.n = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.camacio.a = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.camacio.f = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - status = putParmString(&plink->value.camacio.parm,*value); - break; - case FORM_RF_IO: - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.rfio.cryo = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.rfio.micro = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.rfio.dataset = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.rfio.element = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - break; - case FORM_AB_IO: - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.abio.link = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.abio.adapter = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.abio.card = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.abio.signal = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - status = putParmString(&plink->value.abio.parm,*value); - break; - case FORM_GPIB_IO: - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.gpibio.link = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.gpibio.addr = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - status = putParmString(&plink->value.gpibio.parm,*value); - **verify = 0; - break; - case FORM_BITBUS_IO: - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.bitbusio.link = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.bitbusio.node = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.bitbusio.port = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.bitbusio.signal = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - status = putParmString(&plink->value.bitbusio.parm,*value); - **verify = 0; - break; - case FORM_INST_IO: - status = putParmString(&plink->value.instio.string,*value); - **verify = 0; - break; - case FORM_BBGPIB_IO: - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.bbgpibio.link = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.bbgpibio.bbaddr = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.bbgpibio.gpibaddr = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - status = putParmString(&plink->value.bbgpibio.parm,*value); - **verify = 0; - break; - case FORM_VXI_IO: - plink->value.vxiio.flag = - ((strchr(*value,'Y')||strchr(*value,'y') ? VXIDYNAMIC : VXISTATIC)); - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.vxiio.frame = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.vxiio.slot = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.vxiio.la = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - lvalue = strtol(*value,&endp,0); - if(*endp==0) { - plink->value.vxiio.signal = lvalue; **verify = 0; - } else { - strcpy(*verify,"Illegal. Must be number"); - } - value++; verify++; - status = putParmString(&plink->value.vxiio.parm,*value); - **verify = 0; - break; - default : - status = S_dbLib_badLink; - } - return(status); -} - -char ** dbVerifyForm(DBENTRY *pdbentry,char **value) -{ - struct form *pform = pdbentry->formpvt; - DBLINK *plink; - DBLINK templink; - int nlines,i; - - if(!pform) return(NULL); - plink = pform->plink; - if(!plink) return(NULL); - templink = *plink; - if(plink->type==CONSTANT) templink.value.constantStr = NULL; - if(plink->type==PV_LINK) templink.value.pv_link.pvname = NULL; - pform->plink = &templink; - dbPutForm(pdbentry,value); - if(plink->type==CONSTANT) free((void *)templink.value.constantStr); - if(plink->type==PV_LINK) free((void *)templink.value.pv_link.pvname); - pform->plink = plink; - nlines = pform->nlines; - for(i=0; iverify[i]) return(pform->verify); - } - return(NULL); -} - char * dbGetRelatedField(DBENTRY *psave) { DBENTRY dbEntry; @@ -3748,7 +2946,6 @@ long dbCvtLinkToConstant(DBENTRY *pdbentry) if(plink->type != PV_LINK) return(S_dbLib_badLink); free((void *)plink->value.pv_link.pvname); plink->value.pv_link.pvname = NULL; - dbFreeForm(pdbentry); plink->type = CONSTANT; if(pflddes->initial) { plink->value.constantStr = @@ -3782,7 +2979,6 @@ long dbCvtLinkToPvlink(DBENTRY *pdbentry) if(plink->type == PV_LINK) return(0); if(plink->type != CONSTANT) return(S_dbLib_badLink); free(plink->value.constantStr); - dbFreeForm(pdbentry); plink->type = PV_LINK; plink->value.pv_link.pvlMask = 0; plink->value.pv_link.pvname = 0; diff --git a/src/ioc/dbStatic/dbStaticLib.h b/src/ioc/dbStatic/dbStaticLib.h index 0dbc184f8..a1752319f 100644 --- a/src/ioc/dbStatic/dbStaticLib.h +++ b/src/ioc/dbStatic/dbStaticLib.h @@ -56,7 +56,6 @@ typedef struct{ void *pfield; char *message; short indfield; - void *formpvt; } DBENTRY; /*dbDumpFldDes is obsolete. It is only provided for compatibility*/ @@ -204,14 +203,6 @@ epicsShareFunc int dbGetMenuIndexFromString(DBENTRY *pdbentry, epicsShareFunc drvSup * dbFindDriver(dbBase *pdbbase, const char *name); - -epicsShareFunc int dbAllocForm(DBENTRY *pdbentry); -epicsShareFunc long dbFreeForm(DBENTRY *pdbentry); -epicsShareFunc char ** dbGetFormPrompt(DBENTRY *pdbentry); -epicsShareFunc char ** dbGetFormValue(DBENTRY *pdbentry); -epicsShareFunc long dbPutForm(DBENTRY *pdbentry, char **value); -epicsShareFunc char ** dbVerifyForm(DBENTRY *pdbentry, - char **value); epicsShareFunc char * dbGetRelatedField(DBENTRY *pdbentry); epicsShareFunc int dbGetNLinks(DBENTRY *pdbentry); @@ -262,7 +253,6 @@ extern int dbStaticDebug; #define S_dbLib_noRecSup (M_dbLib|19) /* Record support not found */ #define S_dbLib_strLen (M_dbLib|21) /* String is too long */ #define S_dbLib_noSizeOffset (M_dbLib|23) /* Missing SizeOffset Routine - No record support? */ -#define S_dbLib_noForm (M_dbLib|25) /* dbAllocForm was not called */ #define S_dbLib_outMem (M_dbLib|27) /* Out of memory */ #define S_dbLib_infoNotFound (M_dbLib|29) /* Info item Not Found */