Table of Contents
Previous Chapter
Appendix C: Sample BURT Program
/* for getpwuid() */
#include <pwd.h>
/* for time() */
#include <sys/types.h>
#include <sys/time.h>
/* for geteuid() */
#include <unistd.h>
#include <burtpublic.h>
#include <SDDS.h>
main()
{
SDDS_TABLE table;
int effective_uid;
time_t currtime;
struct passwd *pp;
char buff[100];
if (!SDDS_InitializeOutput(&table, SDDS_ASCII, 1L, NULL, NULL, "Snapshot"))
{
fprintf(stderr, "ERROR: unable to initialize table.\n");
exit(1);
} /* endif */
/***************************/
/* */
/* Defining the Parameters */
/* */
/***************************/
/* first, make all the necessary UNIX calls */
if (time(&currtime) == (time_t) -1)
{
fprintf(stderr, "ERROR: unable to get current time.\n");
exit(1);
} /* endif */
effective_uid = geteuid();
if ((pp = getpwuid(effective_uid)) == NULL)
{
fprintf(stderr, "ERROR: unable to get user information.\n");
exit(1);
} /* endif */
/* time stamp */
if (!SDDS_DefineParameter(&table, TIMEHEADERSTRING,
NULL, NULL, NULL, NULL, SDDS_STRING, ctime(&currtime)) == -1)
{
fprintf(stderr, "ERROR: could not define parameter >%s<.\n",
TIMEHEADERSTRING);
exit(1);
} /* endif */
/* loginid (real world name) */
sprintf(buff, "%s (%s)", pp->pw_name, pp->pw_gecos);
if (!SDDS_DefineParameter(&table, LOGINHEADERSTING,
NULL, NULL, NULL, NULL, SDDS_STRING, buff) == -1)
{
fprintf(stderr, "ERROR: could not define parameter >%s<.\n",
LOGINHEADERSTING);
exit(1);
} /* endif */
/* effective uid */
/* uid - person who logged in ... effective uid person as */
/* defined by "set-user-ID" (if done at all) */
sprintf(buff, "%d", (int) pp->pw_uid);
if (!SDDS_DefineParameter(&table, EFFUIDHEADERSTRING,
NULL, NULL, NULL, NULL, SDDS_STRING, buff) == -1)
{
fprintf(stderr, "ERROR: could not define parameter >%s<.\n",
EFFUIDHEADERSTRING);
exit(1);
} /* endif */
/* group id */
sprintf(buff, "%d", (int) pp->pw_gid);
if (!SDDS_DefineParameter(&table, GROUPIDHEADERSTRING,
NULL, NULL, NULL, NULL, SDDS_STRING, buff) == -1)
{
fprintf(stderr, "ERROR: could not define parameter >%s<.\n",
GROUPIDHEADERSTRING);
exit(1);
} /* endif */
/* keywords */
if (!SDDS_DefineParameter(&table, KEYWORDSHEADERSTRING,
NULL, NULL, NULL, NULL, SDDS_STRING, "these are keywords") == -1)
{
fprintf(stderr, "ERROR: could not define parameter >%s<.\n",
KEYWORDSHEADERSTRING);
exit(1);
} /* endif */
/* comments */
if (!SDDS_DefineParameter(&table, COMMENTSHEADERSTRING,
NULL, NULL, NULL, NULL, SDDS_STRING, "these are comments") == -1)
{
fprintf(stderr, "ERROR: could not define parameter >%s<.\n",
COMMENTSHEADERSTRING);
exit(1);
} /* endif */
/* snapshot type, Absolute */
if (!SDDS_DefineParameter(&table, TYPEHEADERSTRING,
NULL, NULL, NULL, NULL, SDDS_STRING, ABSOLUTESTRING) == -1)
{
fprintf(stderr, "ERROR: could not define parameter >%s<.\n",
TYPEHEADERSTRING);
exit(1);
} /* endif */
/************************/
/* */
/* Defining the Columns */
/* */
/************************/
if (SDDS_DefineColumn(&table, NAME_COL,
NULL, NULL, NULL, NULL, SDDS_STRING, 0) == -1)
{
fprintf(stderr, "ERROR: could not define column >%s<.\n", NAME_COL);
exit(1);
} /* endif */
if (SDDS_DefineColumn(&table, TYPE_COL,
NULL, NULL, NULL, NULL, SDDS_STRING, 0) == -1)
{
fprintf(stderr, "ERROR: could not define column >%s<.\n", TYPE_COL);
exit(1);
} /* endif */
if (SDDS_DefineColumn(&table, LINEAGE_COL,
NULL, NULL, NULL, NULL, SDDS_STRING, 0) == -1)
{
fprintf(stderr, "ERROR: could not define column >%s<.\n", LINEAGE_COL);
exit(1);
} /* endif */
if (SDDS_DefineColumn(&table, READMSG_COL,
NULL, NULL, NULL, NULL, SDDS_STRING, 0) == -1)
{
fprintf(stderr, "ERROR: could not define column >%s<.\n", READMSG_COL);
exit(1);
} /* endif */
if (SDDS_DefineColumn(&table, WRITEMSG_COL,
NULL, NULL, NULL, NULL, SDDS_STRING, 0) == -1)
{
fprintf(stderr, "ERROR: could not define column >%s<.\n", WRITEMSG_COL);
exit(1);
} /* endif */
if (SDDS_DefineColumn(&table, MODE_COL,
NULL, NULL, NULL, NULL, SDDS_STRING, 0) == -1)
{
fprintf(stderr, "ERROR: could not define column >%s<.\n", MODE_COL);
exit(1);
} /* endif */
if (SDDS_DefineColumn(&table, NELEM_COL,
NULL, NULL, NULL, NULL, SDDS_LONG, 0) == -1)
{
fprintf(stderr, "ERROR: could not define column >%s<.\n", NELEM_COL);
exit(1);
} /* endif */
if (SDDS_DefineColumn(&table, VAL_COL,
NULL, NULL, NULL, NULL, SDDS_STRING, 0) == -1)
{
fprintf(stderr, "ERROR: could not define column >%s<.\n", VAL_COL);
exit(1);
} /* endif */
/**********************/
/* */
/* Writing the Header */
/* */
/**********************/
if (!SDDS_WriteLayout(&table))
{
fprintf(stderr, "ERROR: could not write header.\n");
exit(1);
} /* endif */
/***************************/
/* */
/* Starting the Data Table */
/* */
/***************************/
if (!SDDS_StartTable(&table, 5L))
{
fprintf(stderr, "ERROR: unable to start the data table\n");
exit(1);
} /* endif */
/*******************************/
/* */
/* Filling the Table With Data */
/* */
/*******************************/
/* row 0: scalar pv, name="burtgenerator" val=0.0 */
if (!SDDS_SetRowValues(&table,
(long) (SDDS_SET_BY_NAME | SDDS_PASS_BY_VALUE), 0L,
NAME_COL, "burtgenerator",
TYPE_COL, PVSTRING,
LINEAGE_COL, DEFAULTSTRING,
READMSG_COL, DEFAULTSTRING,
WRITEMSG_COL, DEFAULTSTRING,
MODE_COL, DEFAULTSTRING,
NELEM_COL, 1L,
VAL_COL, "0.0",
NULL))
{
fprintf(stderr, "ERROR: unable to set row 0\n");
exit(1);
} /* endif */
/* row 1: device, name="burtdevao" val=1.0 mode=RO */
if (!SDDS_SetRowValues(&table,
(long) (SDDS_SET_BY_NAME | SDDS_PASS_BY_VALUE), 1L,
NAME_COL, "burtdevao",
TYPE_COL, DEVSTRING,
LINEAGE_COL, DEFAULTSTRING,
READMSG_COL, DEFAULTREADMSG,
WRITEMSG_COL, DEFAULTWRITEMSG,
MODE_COL, READONLYSTRING,
NELEM_COL, 1L,
VAL_COL, "1.0",
NULL))
{
fprintf(stderr, "ERROR: unable to set row 1\n");
exit(1);
} /* endif */
/* row 2: device, name="burtdevcalc" val=2.0 mode=RON */
if (!SDDS_SetRowValues(&table,
(long) (SDDS_SET_BY_NAME | SDDS_PASS_BY_VALUE), 2L,
NAME_COL, "burtdevcalc",
TYPE_COL, DEVSTRING,
LINEAGE_COL, DEFAULTSTRING,
READMSG_COL, DEFAULTREADMSG,
WRITEMSG_COL, DEFAULTWRITEMSG,
MODE_COL, READONLYNOTIFYSTRING,
NELEM_COL, 1L,
VAL_COL, "2.0",
NULL))
{
fprintf(stderr, "ERROR: unable to set row 2\n");
exit(1);
} /* endif */
/* row 3: device, name="burtdevcalc" val=3.0 parent=burtdevcomp */
/* readmsg="read" */
if (!SDDS_SetRowValues(&table,
(long) (SDDS_SET_BY_NAME | SDDS_PASS_BY_VALUE), 3L,
NAME_COL, "burtdevcalc",
TYPE_COL, DEVSTRING,
LINEAGE_COL, "burtdevcomp",
READMSG_COL, "read",
WRITEMSG_COL, DEFAULTWRITEMSG,
MODE_COL, DEFAULTSTRING,
NELEM_COL, 1L,
VAL_COL, "3.0",
NULL))
{
fprintf(stderr, "ERROR: unable to set row 3\n");
exit(1);
} /* endif */
/* row 4: vector pv, name="burtwaveform" nelem=6 */
/* val=[4.0 4.1 4.2 4.3 4.4 <missing> <missing> ] */
sprintf(buff, "4.0 4.1 4.2 4.3 %s %s", NULLSTRING, NULLSTRING);
if (!SDDS_SetRowValues(&table,
(long) (SDDS_SET_BY_NAME | SDDS_PASS_BY_VALUE), 4L,
NAME_COL, "burtwaveform",
TYPE_COL, PVSTRING,
LINEAGE_COL, DEFAULTSTRING,
READMSG_COL, DEFAULTSTRING,
WRITEMSG_COL, DEFAULTSTRING,
MODE_COL, DEFAULTSTRING,
NELEM_COL, 6L,
VAL_COL, buff,
NULL))
{
fprintf(stderr, "ERROR: unable to set row 4\n");
exit(1);
} /* endif */
/**************************/
/* */
/* Writing the Data Table */
/* */
/**************************/
if (!SDDS_WriteTable(&table))
{
fprintf(stderr, "ERROR: could not write table.\n");
exit(1);
} /* endif */
/***********/
/* */
/* Cleanup */
/* */
/***********/
if (!SDDS_Terminate(&table))
{
fprintf(stderr, "ERROR: could not terminate SDDS table.\n");
exit(1);
} /* endif */
} /* end main() */
CC = acc
EPICS = /net/phebos/epics/add_on
BURTINCDIR = -I$(EPICS)/src/burt
SDDSINCDIR = -I$(EPICS)/src/sdds/include
INCLUDEDIRS = $(BURTINCDIR) $(SDDSINCDIR)
SDDSLIBDIR = -L$(EPICS)/lib
LIBDIRS = $(SDDSLIBDIR)
LIBS = -lSDDS1 -lnamelist -lmdblib
CFLAGS = -c
snap: snap.o
$(CC) -o snap snap.o $(LIBDIRS) $(LIBS)
clean:
/bin/rm -f *.o snap
.c.o: $*.c
$(CC) $(CFLAGS) $(INCLUDEDIRS) $*.c
Table of Contents
Next Chapter