/*************************************************************************\ * Copyright (c) 2002 The University of Chicago, as Operator of Argonne * National Laboratory. * Copyright (c) 2002 The Regents of the University of California, as * Operator of Los Alamos National Laboratory. * This file is distributed subject to a Software License Agreement found * in the file LICENSE that is included with this distribution. \*************************************************************************/ /* for getpwuid() */ #include /* for time() */ #include #include /* for geteuid() */ #include #include #include 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); fflush(stderr); 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); fflush(stderr); 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); fflush(stderr); 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); fflush(stderr); 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="nickgenerator" val=0.0 */ if (!SDDS_SetRowValues(&table, (long) (SDDS_SET_BY_NAME | SDDS_PASS_BY_VALUE), 0L, NAME_COL, "nickgenerator", 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="nickwaveform" nelem=6 */ /* val=[4.0 4.1 4.2 4.3 4.4 ] */ 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, "nickwaveform", 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() */