Initial revision

This commit is contained in:
Janet B. Anderson
1993-07-19 13:56:10 +00:00
parent 18121ff089
commit 2d40290c26
4 changed files with 402 additions and 0 deletions

83
src/db/atdb.c Normal file
View File

@@ -0,0 +1,83 @@
/*atodb.c*/
/* share/src/db $Id$ */
/*
*
* Author: Marty Kraimer
*
* Experimental Physics and Industrial Control System (EPICS)
*
* Copyright 1991, the Regents of the University of California,
* and the University of Chicago Board of Governors.
*
* This software was produced under U.S. Government contracts:
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
* and (W-31-109-ENG-38) at Argonne National Laboratory.
*
* Initial development by:
* The Controls and Automation Group (AT-8)
* Ground Test Accelerator
* Accelerator Technology Division
* Los Alamos National Laboratory
*
* Co-developed with
* The Controls and Computing Group
* Accelerator Systems Division
* Advanced Photon Source
* Argonne National Laboratory
*
* Modification Log:
* -----------------
* .01 07-13-93 mrk Original version
*/
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <time.h>
#include <errMdef.h>
#include <dbDefs.h>
#include <dbStaticLib.h>
DBBASE *pdbbase;
DBENTRY *pdbentry;
main(int argc,char **argv)
{
FILE *fpdctsdr;
FILE *fp;
long status;
char *ptime;
time_t timeofday;
char *rectype;
if(argc!=3) {
printf("Usage: atdb <dctsdr file> <database file>\n");
exit(-1);
}
fpdctsdr = fopen(argv[1],"r");
if(!fpdctsdr) {
errMessage(0,"Error opening file");
exit(-1);
}
pdbbase=dbAllocBase();
pdbentry=dbAllocEntry(pdbbase);
status=dbRead(pdbbase,fpdctsdr);
if(status) {
errMessage(status,"dbRead");
exit(-1);
}
yyreset();
yyparse();
fp=fopen(argv[2],"w");
if(fp==NULL) {
errMessage(0,"Error opening file");
exit(-1);
}
status = dbWrite(pdbbase,fpdctsdr,fp);
if(status) errMessage(status,"dbWrite");
fclose(fpdctsdr);
fclose(fp);
dbFreeEntry(pdbentry);
dbFreeBase(pdbbase);
return(0);
}

35
src/db/atdb_lex.l Normal file
View File

@@ -0,0 +1,35 @@
b [a-zA-Z0-9_]
a [ \t]
d [a-zA-Z0-9_\,\./\*#\[\]%:;!|\'\-&\(\)@\?\+<>]
%{
yyreset()
{
line_num=1;
BEGIN INITIAL;
return;
}
%}
%%
^[A-Z0-9_]+ { yylval.Str=(char *)malloc(strlen(yytext)+1);
strcpy(yylval.Str,yytext);
return(FIELD); }
^"PV:" { return(PV); }
"Type:" { return(TYPE); }
{ return(CLOSE); }
\n { line_num++; return(CLOSE); }
"$$end" { return(CLOSE); }
{d}+ { yylval.Str=(char *)malloc(strlen(yytext)+1);
strcpy(yylval.Str,yytext);
return(WORD); }
. ;
\n { line_num++; }
%%

119
src/db/atdb_yacc.y Normal file
View File

@@ -0,0 +1,119 @@
%{
#include <stdio.h>
#include <memory.h>
#include <string.h>
#include <dbStaticLib.h>
/* kludge for buggy lex/yacc. exploits the fact that we know the union */
/* below will be given the name YYSTYPE. done so that ifndef YYSTYPE */
/* (as it appears in pdb.c) fails */
#define YYSTYPE OUR_YYSTYPE
int line_num;
extern DBENTRY *pdbentry;
char rectype[100];
char recname[100];
char curr_field[10];
char curr_value[200];
char message[200];
long status;
static void printMessage(char *mess) {
sprintf(message,"%s Error near line %d Type: %s Name: %s Field: %s Value: %s",
mess,line_num,rectype,recname,curr_field,curr_value);
errMessage(status,message);
}
%}
%start conv
%token <Str> WORD
%token <Str> FIELD
%token <Str> TYPE
%token <Str> PV CLOSE
%union
{
int Int;
char Char;
char *Str;
double Real;
}
%%
conv: things
;
things:
| things thing
;
thing: header fields CLOSE
| header CLOSE
| junko
;
header: PV WORD TYPE WORD WORD
{
strcpy(rectype,$4);
strcpy(recname,$2);
status = dbFindRecdes(pdbentry,rectype);
if(status) printMessage("dbFindRecdes");
status = dbCreateRecord(pdbentry,recname);
if(status) printMessage("dbCreateRecord");
}
fields: field
| fields field
;
field: f_name words
{
status = dbPutString(pdbentry,curr_value);
if(status) printMessage("dbPutString");
}
;
f_name: FIELD
{
curr_value[0]='\0';
strcpy(curr_field,$1);
status = dbFindField(pdbentry,$1);
if(status) printMessage("dbFindField");
}
;
words:
| words WORD
{
char* p;
/* pretty crappy stuff */
if((p=strstr($2,".PP.MS"))) {p[0]=' ';p[3]=' ';}
else if((p=strstr($2,".PP.NMS"))) {p[0]=' ';p[3]=' ';}
else if((p=strstr($2,".NPP.MS"))) {p[0]=' ';p[4]=' ';}
else if((p=strstr($2,".NPP.NMS"))) {p[0]=' ';p[4]=' ';}
else if(strlen(curr_value)>0) { strcat(curr_value," "); }
strcat(curr_value,$2);
}
;
junko: WORD
| CLOSE
;
%%
#include "atdb_lex.c"
yyerror(str)
char *str;
{
sprintf(message,"Error line %d : %s\n",line_num, yytext);
errMessage(-1,message);
}
yywrap() { return(1); }

165
src/db/dbta.c Normal file
View File

@@ -0,0 +1,165 @@
/*dbta.c*/
/* share/src/db $Id$ */
/*
*
* Author: Marty Kraimer
*
* Experimental Physics and Industrial Control System (EPICS)
*
* Copyright 1991, the Regents of the University of California,
* and the University of Chicago Board of Governors.
*
* This software was produced under U.S. Government contracts:
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
* and (W-31-109-ENG-38) at Argonne National Laboratory.
*
* Initial development by:
* The Controls and Automation Group (AT-8)
* Ground Test Accelerator
* Accelerator Technology Division
* Los Alamos National Laboratory
*
* Co-developed with
* The Controls and Computing Group
* Accelerator Systems Division
* Advanced Photon Source
* Argonne National Laboratory
*
* Modification Log:
* -----------------
* .01 07-13-93 mrk Original version
*/
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <time.h>
#include <errMdef.h>
#include <dbDefs.h>
#include <dbStaticLib.h>
DBBASE *pdbbase;
void parse_command_line_args(int, char **, int *, int *, char **);
int main(int argc,char **argv)
{
DBENTRY *pdbentry;
FILE *fp;
long status;
char *ptime;
time_t timeofday;
char *rectype;
int verbose;
int oldshortform;
char *dbname;
char *sdr_filename;
parse_command_line_args(argc, argv, &verbose, &oldshortform, &dbname);
fp = fopen(dbname,"r");
if(!fp) {
errMessage(0,"Error opening file");
exit(-1);
}
pdbbase=dbAllocBase();
pdbentry=dbAllocEntry(pdbbase);
status=dbRead(pdbbase,fp);
if(status) {
errMessage(status,"dbRead");
exit(-1);
}
fclose(fp);
status = dbFirstRecdes(pdbentry);
if(status) {
printf("No record description\n");
exit(-1);
}
if(oldshortform) {
printf("$$mono\n");
timeofday = time((time_t *)0);
ptime = ctime(&timeofday);
printf(" Time: %s\n",ptime);
}
while(!status) {
rectype = dbGetRecdesName(pdbentry);
status = dbFirstRecord(pdbentry);
while(!status) {
int generate_nl;
printf("\nPV: %s Type: %s (atdb)",dbGetRecordName(pdbentry),rectype);
printf("\n");
generate_nl=FALSE;
status = dbFirstFielddes(pdbentry,TRUE);
if(status) printf(" No Fields\n");
while(!status) {
char *pstr;
int lineout;
if(verbose || !dbIsDefaultValue(pdbentry)) {
if(generate_nl) printf("\n");
printf("%4s ",dbGetFieldName(pdbentry));
pstr = dbGetString(pdbentry);
if(pstr) printf("%s",pstr);
generate_nl=TRUE;
}
status=dbNextFielddes(pdbentry,TRUE);
}
printf("\f\n");
status = dbNextRecord(pdbentry);
}
status = dbNextRecdes(pdbentry);
}
if(oldshortform) printf("$$end\n");
dbFreeEntry(pdbentry);
dbFreeBase(pdbbase);
return(0);
}
void parse_command_line_args(int argc, char **argv,int *verbose,
int *oldshortform, char **dbname)
{
extern char *optarg; /* needed for getopt() */
extern int optind; /* needed for getopt() */
int i;
int c;
int input_error;
/* defaults */
*verbose = FALSE;
*oldshortform = FALSE;
*dbname = (char *) NULL;
input_error = FALSE;
while (!input_error && (c = getopt(argc, argv, "vs")) != -1)
{
switch (c)
{
case 'v': *verbose = TRUE; break;
case 's': *oldshortform = TRUE; break;
case '?': input_error = 1; break;
default: input_error = 1; break;
} /* end switch() */
} /* endwhile */
if (!input_error && optind < argc)
{
int gotperiod=FALSE;
int len;
len = strlen(argv[optind]);
if(strchr(argv[optind],'.')) gotperiod = TRUE;
if(!gotperiod) len = len + strlen(".database");
*dbname = dbCalloc(1,len);
strcpy(*dbname,argv[optind]);
if(!gotperiod) strcat(*dbname,".database");
return;
}
fprintf(stderr, "\nusage: dbta [-v] [-s] fn\n");
fprintf(stderr,"\n\t-v\tVerbose mode, outputs all prompt fields of\n");
fprintf(stderr,"\t\trecords to standard out. If not specified,\n");
fprintf(stderr,"\t\tthen only non default fields will be printed\n");
fprintf(stderr,"\t-s\tGenerate old DCT short form format file\n");
fprintf(stderr,"\tfn\tNames the .database file.\n");
exit(1);
}