diff --git a/src/dbStatic/Makefile.Unix b/src/dbStatic/Makefile.Unix index c021387c9..12efec326 100755 --- a/src/dbStatic/Makefile.Unix +++ b/src/dbStatic/Makefile.Unix @@ -19,6 +19,7 @@ DEPLIBS = ./libDb.a\ SRCS.c = \ dbAsciiYacc.c \ ../dbAsciiTest.c\ + ../dbAsciiExpand.c\ ../dbPvdLib.c\ ../dbStaticNoRun.c\ ../dbStaticLib.c\ @@ -27,6 +28,7 @@ SRCS.c = \ OBJS = \ dbAsciiTest.o\ + dbAsciiExpand.o\ dbAsciiToMenuH.o\ dbAsciiToRecordtypeH.o @@ -35,6 +37,7 @@ LIBNAME = libDb.a PROD = \ dbAsciiTest\ + dbAsciiExpand\ dbAsciiToMenuH\ dbAsciiToRecordtypeH diff --git a/src/dbStatic/dbAsciiExpand.c b/src/dbStatic/dbAsciiExpand.c new file mode 100644 index 000000000..8456a9a42 --- /dev/null +++ b/src/dbStatic/dbAsciiExpand.c @@ -0,0 +1,56 @@ +/* dbAsciiExpand.c */ +/* Author: Marty Kraimer Date: 30NOV95 */ +/***************************************************************** + COPYRIGHT NOTIFICATION +***************************************************************** + +(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO + +This software was developed under a United States Government license +described on the COPYRIGHT_UniversityOfChicago file included as part +of this distribution. +**********************************************************************/ + +/* Modification Log: + * ----------------- + * .01 30NOV95 mrk Initial Implementation +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +DBBASE *pdbbase = NULL; + +int main(int argc,char **argv) +{ + long status; + FILE *fp; + + if(argc!=3) { + printf("usage: dbAsciiExpand infile outfile\n"); + exit(0); + } + status = dbAsciiRead(&pdbbase,argv[1]); + fp = fopen(argv[2],"w"); + if(!fp) { + errMessage(0,argv[2]); + return(-1); + } + dbWriteMenu(pdbbase,fp,0); + dbWriteRecDes(pdbbase,fp,0); + dbWriteDevice(pdbbase,fp); + dbWriteDriver(pdbbase,fp); + status = fclose(fp); + if(!fp) { + errMessage(0,argv[2]); + return(-1); + } + return(0); +} diff --git a/src/dbStatic/dbAsciiRoutines.c b/src/dbStatic/dbAsciiRoutines.c index 3bc6cf377..a0a3eff88 100644 --- a/src/dbStatic/dbAsciiRoutines.c +++ b/src/dbStatic/dbAsciiRoutines.c @@ -258,6 +258,7 @@ static void dbAsciiIncludeNew(char *filename) inputFile *pinputFileFirst; FILE *fp; char *currentPath; + char *newCurrentPath; int lenPathAndFilename = 0; int lenstr; @@ -282,7 +283,7 @@ static void dbAsciiIncludeNew(char *filename) } pinputFile = (inputFile *)ellNext(&pinputFile->node); } - lenPathAndFilename += strlen(filename) + 1; + lenPathAndFilename += strlen(filename) + 1; currentPath = dbCalloc(lenPathAndFilename,sizeof(char)); pinputFile = pinputFileFirst; while(pinputFile) { @@ -295,6 +296,22 @@ static void dbAsciiIncludeNew(char *filename) } strcat(currentPath,filename); fp = fopen(currentPath,"r"); + if(!fp) { + newCurrentPath = dbCalloc( + (strlen("./base/rec/") + strlen(currentPath) + 1),sizeof(char)); + strcpy(newCurrentPath,"./base/rec/"); + strcat(newCurrentPath,currentPath); + fp = fopen(newCurrentPath,"r"); + free((void *)newCurrentPath); + } + if(!fp) { + newCurrentPath = dbCalloc( + (strlen("./rec/") + strlen(currentPath) + 1),sizeof(char)); + strcpy(newCurrentPath,"./rec/"); + strcat(newCurrentPath,currentPath); + fp = fopen(newCurrentPath,"r"); + free((void *)newCurrentPath); + } if(!fp) { errPrintf(0,__FILE__, __LINE__, "dbAsciiIncludeNew opening file %s\n",currentPath); @@ -404,6 +421,7 @@ static void dbAsciiRecordtypeFieldHead(char *name,char *type) pdbFldDes = dbCalloc(1,sizeof(dbFldDes)); allocTemp(pdbFldDes); pdbFldDes->name = name; + pdbFldDes->as_level = ASL1; for(i=0; ifield_type = pamapdbfType[i].value; diff --git a/src/dbStatic/dbAsciiToMenuH.c b/src/dbStatic/dbAsciiToMenuH.c index a6985d221..458a1631e 100644 --- a/src/dbStatic/dbAsciiToMenuH.c +++ b/src/dbStatic/dbAsciiToMenuH.c @@ -36,13 +36,16 @@ int main(int argc,char **argv) char *pext; FILE *outFile; int i; + char *plastSlash; if(argc!=2) { fprintf(stderr,"usage: dbAsciiToMenuH file.ascii\n"); exit(-1); } - outFilename = dbCalloc(1,strlen(argv[1])+1); - strcpy(outFilename,argv[1]); + plastSlash = strrchr(argv[1],'/'); + plastSlash = (plastSlash ? plastSlash+1 : argv[1]); + outFilename = dbCalloc(1,strlen(plastSlash)+1); + strcpy(outFilename,plastSlash); pext = strstr(outFilename,".ascii"); if(!pext) { fprintf(stderr,"Input file MUST have .ascii extension\n"); diff --git a/src/dbStatic/dbAsciiToRecordtypeH.c b/src/dbStatic/dbAsciiToRecordtypeH.c index fda4f21c4..53994c27b 100644 --- a/src/dbStatic/dbAsciiToRecordtypeH.c +++ b/src/dbStatic/dbAsciiToRecordtypeH.c @@ -39,13 +39,16 @@ int main(int argc,char **argv) dbRecDes *pdbRecDes; dbFldDes *pdbFldDes; int isdbCommonRecord = FALSE; + char *plastSlash; if(argc!=2) { fprintf(stderr,"usage: dbAsciiToMenuH file.ascii\n"); exit(-1); } - outFilename = dbCalloc(1,strlen(argv[1])+1); - strcpy(outFilename,argv[1]); + plastSlash = strrchr(argv[1],'/'); + plastSlash = (plastSlash ? plastSlash+1 : argv[1]); + outFilename = dbCalloc(1,strlen(plastSlash)+1); + strcpy(outFilename,plastSlash); pext = strstr(outFilename,".ascii"); if(!pext) { fprintf(stderr,"Input file MUST have .ascii extension\n"); diff --git a/src/dbStatic/dbStaticLib.c b/src/dbStatic/dbStaticLib.c index 53b2bf74f..19dbb584c 100644 --- a/src/dbStatic/dbStaticLib.c +++ b/src/dbStatic/dbStaticLib.c @@ -32,8 +32,10 @@ of this distribution. #define DBFLDTYPES_GBLSOURCE #define GUIGROUPS_GBLSOURCE #define SPECIAL_GBLSOURCE -#define LINK_GBLSOURCE #include +#define LINK_GBLSOURCE +#include +#undef LINK_GBLSOURCE #include #include #include @@ -48,7 +50,6 @@ of this distribution. #include #include #include -#include int dbDebug = 0; #define messagesize 100 @@ -468,6 +469,159 @@ long dbWriteRecords(DBBASE *pdbbase,FILE *fp,char *precdesname,int level) return(0); } +void dbWriteMenu(DBBASE *pdbbase,FILE *fp,char *menuName) +{ + dbMenu *pdbMenu; + int gotMatch; + int i; + + if(!pdbbase) { + printf("pdbBase not specified\n"); + return; + } + pdbMenu = (dbMenu *)ellFirst(&pdbbase->menuList); + while(pdbMenu) { + if(menuName) { + gotMatch = (strcmp(menuName,pdbMenu->name)==0) ? TRUE : FALSE; + }else { + gotMatch=TRUE; + } + if(gotMatch) { + fprintf(fp,"menu(%s) {\n",pdbMenu->name); + for(i=0; inChoice; i++) { + fprintf(fp,"\tchoice(%s,\"%s\")\n",pdbMenu->papChoiceName[i], + pdbMenu->papChoiceValue[i]); + } + fprintf(fp,"}\n"); + if(menuName) break; + } + pdbMenu = (dbMenu *)ellNext(&pdbMenu->node); + } +} + +void dbWriteRecDes(DBBASE *pdbbase,FILE *fp,char *recdesName) +{ + dbRecDes *pdbRecDes; + dbFldDes *pdbFldDes; + int gotMatch; + int i; + + if(!pdbbase) { + printf("pdbBase not specified\n"); + return; + } + for(pdbRecDes = (dbRecDes *)ellFirst(&pdbbase->recDesList); + pdbRecDes; pdbRecDes = (dbRecDes *)ellNext(&pdbRecDes->node)) { + if(recdesName) { + gotMatch = (strcmp(recdesName,pdbRecDes->name)==0) ? TRUE : FALSE; + }else { + gotMatch=TRUE; + } + if(!gotMatch) continue; + fprintf(fp,"recordtype(%s) {\n",pdbRecDes->name); + for(i=0; ino_fields; i++) { + int j; + + pdbFldDes = pdbRecDes->papFldDes[i]; + fprintf(fp,"\tfield(%s,",pdbFldDes->name); + for(j=0; jfield_type) break; + } + if(j>=DBF_NTYPES) + printf("\t field_type: %d\n", pdbFldDes->field_type); + else + fprintf(fp,"%s) {\n",pamapdbfType[j].strvalue); + if(pdbFldDes->prompt) + fprintf(fp,"\t\tprompt(\"%s\")\n",pdbFldDes->prompt); + if(pdbFldDes->initial) + fprintf(fp,"\t\tinitial(\"%s\")\n",pdbFldDes->initial); + if(pdbFldDes->promptgroup) { + for(j=0; jpromptgroup) { + fprintf(fp,"\t\tpromptgroup(%s)\n", + pamapguiGroup[j].strvalue); + break; + } + } + } + if(pdbFldDes->special) { + for(j=0; jspecial) { + fprintf(fp,"\t\tspecial(%s)\n", + pamapspcType[j].strvalue); + break; + } + } + } + if(pdbFldDes->extra) + fprintf(fp,"\t\textra(\"%s\")\n",pdbFldDes->extra); + if(pdbFldDes->field_type==DBF_MENU) { + if(pdbFldDes->ftPvt) + fprintf(fp,"\t\tmenu(%s)\n", + ((dbMenu *)pdbFldDes->ftPvt)->name); + else + printf("\t\t menu: NOT FOUND\n"); + } + if(pdbFldDes->field_type==DBF_STRING) { + fprintf(fp,"\t\tsize(%d)\n", + pdbFldDes->size); + } + if(pdbFldDes->process_passive) fprintf(fp,"\t\tpp(TRUE)\n"); + if(pdbFldDes->base) fprintf(fp,"\t\tbase(HEX)\n"); + if(pdbFldDes->interest) + fprintf(fp,"\t\tinterest(%d)\n",pdbFldDes->interest); + if(!pdbFldDes->as_level) fprintf(fp,"\t\tasl(ASL0)\n"); + fprintf(fp,"\t}\n"); + } + fprintf(fp,"}\n"); + if(recdesName) break; + } +} + +void dbWriteDevice(DBBASE *pdbbase,FILE *fp) +{ + dbRecDes *pdbRecDes; + devSup *pdevSup; + + if(!pdbbase) { + printf("pdbBase not specified\n"); + return; + } + for(pdbRecDes = (dbRecDes *)ellFirst(&pdbbase->recDesList); + pdbRecDes; pdbRecDes = (dbRecDes *)ellNext(&pdbRecDes->node)) { + for(pdevSup = (devSup *)ellFirst(&pdbRecDes->devList); + pdevSup; pdevSup = (devSup *)ellNext(&pdevSup->node)) { + int j; + + for(j=0; j< LINK_NTYPES; j++) { + if(pamaplinkType[j].value==pdevSup->link_type) break; + } + if(j>=LINK_NTYPES) { + fprintf(fp,"link_type not valid\n"); + continue; + } + fprintf(fp,"device(%s,%s,%s,\"%s\")\n", + pdbRecDes->name, + pamaplinkType[j].strvalue, + pdevSup->name,pdevSup->choice); + } + } +} + +void dbWriteDriver(DBBASE *pdbbase,FILE *fp) +{ + drvSup *pdrvSup; + + if(!pdbbase) { + printf("pdbBase not specified\n"); + return; + } + for(pdrvSup = (drvSup *)ellFirst(&pdbbase->drvList); + pdrvSup; pdrvSup = (drvSup *)ellNext(&pdrvSup->node)) { + fprintf(fp,"driver(%s)\n",pdrvSup->name); + } +} + long dbFindRecdes(DBENTRY *pdbentry,char *rectype) { dbBase *pdbbase = pdbentry->pdbbase; @@ -521,7 +675,7 @@ long dbCreateRecord(DBENTRY *pdbentry,char *precordName) dbRecordNode *pNewRecNode = NULL; long status; - if(strlen(precordName)>PVNAME_SZ) return(S_dbLib_nameLength); + if((int)strlen(precordName)>PVNAME_SZ) return(S_dbLib_nameLength); if(!precdes) return(S_dbLib_recdesNotFound); /* clear callers entry */ zeroDbentry(pdbentry); @@ -644,7 +798,7 @@ long dbRenameRecord(DBENTRY *pdbentry,char *newName) long status; DBENTRY dbentry; - if(strlen(newName)>PVNAME_SZ) return(S_dbLib_nameLength); + if((int)strlen(newName)>PVNAME_SZ) return(S_dbLib_nameLength); if(!precnode) return(S_dbLib_recNotFound); dbInitEntry(pdbentry->pdbbase,&dbentry); status = dbFindRecord(&dbentry,newName); @@ -1105,7 +1259,7 @@ long dbPutString(DBENTRY *pdbentry,char *pstring) if(pstr[ind]!=' ' && pstr[ind]!='\t') break; pstr[ind] = '\0'; } - if(!pstr || strlen(pstr)<=0 ) { + if(!pstr || (int)strlen(pstr)<=0 ) { if(plink->type==PV_LINK) dbCvtLinkToConstant(pdbentry); if(plink->type!=CONSTANT) return(S_dbLib_badField); return(0); @@ -1124,8 +1278,9 @@ long dbPutString(DBENTRY *pdbentry,char *pstring) tempval = strtod(pstr,&end); if(*end == 0) { if(plink->type==PV_LINK) dbCvtLinkToConstant(pdbentry); - if((!plink->value.constantStr) - || (strlen(plink->value.constantStr)value.constantStr) || + ((int)strlen(plink->value.constantStr)<(int)strlen(pstr) + )) { free(plink->value.constantStr); plink->value.constantStr = dbCalloc(strlen(pstr)+1,sizeof(char)); @@ -1874,7 +2029,7 @@ long dbPutForm(DBENTRY *pdbentry,char **value) break; } if((!plink->value.constantStr) - || (strlen(plink->value.constantStr)value.constantStr)<(int)strlen(*value))) { free(plink->value.constantStr); plink->value.constantStr = dbCalloc(strlen(*value)+1,sizeof(char)); }