dbtools: Added command-line variable parameters.

This commit is contained in:
Andrew Johnson
2010-08-20 17:59:38 -05:00
parent 3db5427e1d
commit 4a637c04cf
4 changed files with 47 additions and 37 deletions

View File

@@ -12,10 +12,7 @@
#define INCdbLoadTemplateh
#include "shareLib.h"
epicsShareFunc int epicsShareAPI dbLoadTemplate(char* sub_file);
epicsShareFunc int epicsShareAPI dbLoadTemplate(
const char *sub_file, const char *cmd_collect);
#endif /*INCdbLoadTemplateh*/

View File

@@ -22,12 +22,13 @@
#include "dbLoadTemplate.h"
static int line_num;
static int yyerror();
static int yyerror(char* str);
#define VAR_MAX_VAR_STRING 5000
#define VAR_MAX_VARS 100
static char *sub_collect = NULL;
static char *gbl_collect;
static char** vars = NULL;
static char* db_file_name = NULL;
static int var_count, sub_count;
@@ -39,6 +40,7 @@ static int var_count, sub_count;
%token <Str> WORD QUOTE
%token DBFILE
%token PATTERN
%token GLOBAL
%token EQUALS COMMA
%left O_PAREN C_PAREN
%left O_BRACE C_BRACE
@@ -127,7 +129,7 @@ subs: subs sub
sub: WORD O_BRACE vals C_BRACE
{
sub_collect[strlen(sub_collect) - 1] = '\0';
gbl_collect[strlen(gbl_collect) - 1] = '\0'; /* drop ',' */
#ifdef ERROR_STUFF
fprintf(stderr, "dbLoadRecords(%s)\n", sub_collect);
#endif
@@ -136,12 +138,12 @@ sub: WORD O_BRACE vals C_BRACE
else
fprintf(stderr, "Error: no db file name given\n");
dbmfFree($1);
sub_collect[0] = '\0';
*gbl_collect = '\0';
sub_count = 0;
}
| O_BRACE vals C_BRACE
{
sub_collect[strlen(sub_collect) - 1] = '\0';
gbl_collect[strlen(gbl_collect) - 1] = '\0'; /* drop ',' */
#ifdef ERROR_STUFF
fprintf(stderr, "dbLoadRecords(%s)\n", sub_collect);
#endif
@@ -149,7 +151,7 @@ sub: WORD O_BRACE vals C_BRACE
dbLoadRecords(db_file_name, sub_collect);
else
fprintf(stderr, "Error: no db file name given\n");
sub_collect[0] = '\0';
*gbl_collect = '\0';
sub_count = 0;
}
;
@@ -162,10 +164,10 @@ vals: vals val
val: QUOTE
{
if (sub_count <= var_count) {
strcat(sub_collect, vars[sub_count]);
strcat(sub_collect, "=\"");
strcat(sub_collect, $1);
strcat(sub_collect, "\",");
strcat(gbl_collect, vars[sub_count]);
strcat(gbl_collect, "=\"");
strcat(gbl_collect, $1);
strcat(gbl_collect, "\",");
sub_count++;
}
dbmfFree($1);
@@ -173,10 +175,10 @@ val: QUOTE
| WORD
{
if (sub_count <= var_count) {
strcat(sub_collect, vars[sub_count]);
strcat(sub_collect, "=");
strcat(sub_collect, $1);
strcat(sub_collect, ",");
strcat(gbl_collect, vars[sub_count]);
strcat(gbl_collect, "=");
strcat(gbl_collect, $1);
strcat(gbl_collect, ",");
sub_count++;
}
dbmfFree($1);
@@ -189,7 +191,7 @@ var_subs: var_subs var_sub
var_sub: WORD O_BRACE sub_pats C_BRACE
{
sub_collect[strlen(sub_collect) - 1] = '\0';
gbl_collect[strlen(gbl_collect) - 1] = '\0'; /* drop ',' */
#ifdef ERROR_STUFF
fprintf(stderr, "dbLoadRecords(%s)\n", sub_collect);
#endif
@@ -198,12 +200,12 @@ var_sub: WORD O_BRACE sub_pats C_BRACE
else
fprintf(stderr, "Error: no db file name given\n");
dbmfFree($1);
sub_collect[0] = '\0';
*gbl_collect = '\0';
sub_count = 0;
}
| O_BRACE sub_pats C_BRACE
{
sub_collect[strlen(sub_collect) - 1] = '\0';
gbl_collect[strlen(gbl_collect) - 1] = '\0'; /* drop ',' */
#ifdef ERROR_STUFF
fprintf(stderr, "dbLoadRecords(%s)\n", sub_collect);
#endif
@@ -211,7 +213,7 @@ var_sub: WORD O_BRACE sub_pats C_BRACE
dbLoadRecords(db_file_name, sub_collect);
else
fprintf(stderr, "Error: no db file name given\n");
sub_collect[0] = '\0';
*gbl_collect = '\0';
sub_count = 0;
}
;
@@ -223,19 +225,19 @@ sub_pats: sub_pats sub_pat
sub_pat: WORD EQUALS WORD
{
strcat(sub_collect, $1);
strcat(sub_collect, "=");
strcat(sub_collect, $3);
strcat(sub_collect, ",");
strcat(gbl_collect, $1);
strcat(gbl_collect, "=");
strcat(gbl_collect, $3);
strcat(gbl_collect, ",");
dbmfFree($1); dbmfFree($3);
sub_count++;
}
| WORD EQUALS QUOTE
{
strcat(sub_collect, $1);
strcat(sub_collect, "=\"");
strcat(sub_collect, $3);
strcat(sub_collect, "\",");
strcat(gbl_collect, $1);
strcat(gbl_collect, "=\"");
strcat(gbl_collect, $3);
strcat(gbl_collect, "\",");
dbmfFree($1); dbmfFree($3);
sub_count++;
}
@@ -257,7 +259,7 @@ static int yyerror(char* str)
static int is_not_inited = 1;
int epicsShareAPI dbLoadTemplate(char* sub_file)
int epicsShareAPI dbLoadTemplate(const char *sub_file, const char *cmd_collect)
{
FILE *fp;
int ind;
@@ -285,7 +287,14 @@ int epicsShareAPI dbLoadTemplate(char* sub_file)
return -1;
}
sub_collect[0] = '\0';
if (cmd_collect && *cmd_collect) {
strcpy(sub_collect, cmd_collect);
strcat(sub_collect, ",");
gbl_collect = sub_collect + strlen(sub_collect);
} else {
gbl_collect = sub_collect;
*gbl_collect = '\0';
}
var_count = 0;
sub_count = 0;

View File

@@ -20,6 +20,7 @@ bareword [a-zA-Z0-9_\-+:./\\\[\]<>;]
"pattern" { return(PATTERN); }
"file" { return(DBFILE); }
"global" { return(GLOBAL); }
{doublequote}({dstringchar}|{escape})*{doublequote} |
{singlequote}({sstringchar}|{escape})*{singlequote} {

View File

@@ -13,17 +13,20 @@
/* dbLoadTemplate */
static const iocshArg dbLoadTemplateArg0 = { "file name",iocshArgString};
static const iocshArg * const dbLoadTemplateArgs[1] = {&dbLoadTemplateArg0};
static const iocshArg dbLoadTemplateArg0 = {"filename", iocshArgString};
static const iocshArg dbLoadTemplateArg1 = {"var=value", iocshArgString};
static const iocshArg * const dbLoadTemplateArgs[2] = {
&dbLoadTemplateArg0, &dbLoadTemplateArg1
};
static const iocshFuncDef dbLoadTemplateFuncDef =
{"dbLoadTemplate",1,dbLoadTemplateArgs};
{"dbLoadTemplate", 2, dbLoadTemplateArgs};
static void dbLoadTemplateCallFunc(const iocshArgBuf *args)
{
dbLoadTemplate(args[0].sval);
dbLoadTemplate(args[0].sval, args[1].sval);
}
void epicsShareAPI dbtoolsIocRegister(void)
{
iocshRegister(&dbLoadTemplateFuncDef,dbLoadTemplateCallFunc);
iocshRegister(&dbLoadTemplateFuncDef, dbLoadTemplateCallFunc);
}