|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 5735 (0x1667) Types: TextFile Names: »ccmd.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦653021b30⟧ »EurOpenD3/utils/downtime.tar.Z« └─⟦946c717da⟧ └─⟦this⟧ »ccmd.c«
/* * Copyright (c) 1988 Michael A. Cooper, University of Southern California. * This program may be used, copied, modified, and redistributed freely * for noncommercial purposes, so long as this notice remains intact. */ #ifndef lint static char *RCSid = "$Header: ccmd.c,v 4.2 88/07/05 15:58:40 mcooper Exp $"; #endif /* *------------------------------------------------------------------ * * $Source: /usr/skat3/src/common/usc/etc/downtime/RCS/ccmd.c,v $ * $Revision: 4.2 $ * $Date: 88/07/05 15:58:40 $ * $State: Exp $ * *------------------------------------------------------------------ * * Michael A. Cooper * Research and Development Group * University Computing Services * University of Southern California * (mcooper@oberon.USC.EDU) * *------------------------------------------------------------------ * * $Log: ccmd.c,v $ * Revision 4.2 88/07/05 15:58:40 mcooper * Added copyright notice. * * Revision 4.1 88/06/08 12:38:06 mcooper * Shorten opening banner. * * Revision 4.0 88/04/20 15:41:38 mcooper * Version 4. * * Revision 3.2 88/03/02 16:09:39 mcooper * Cleanup time. * * Revision 3.1 88/03/01 15:48:21 mcooper * Cleaned up header files. * * Revision 3.0 87/07/24 14:14:45 mcooper * Version 3. * *------------------------------------------------------------------ */ #include "defs.h" #include <signal.h> #include <sys/file.h> #include "parse.h" keywrd ynkeys[] = { { "YES", 0, YES }, { "NO", 0, NO }, }; keytab yntab = { (sizeof(ynkeys)/sizeof(keywrd)), ynkeys }; fdb ynfdb = { _CMKEY, 0, NULL, (pdat) &yntab, "Answer, ", NULL, NULL }; keywrd ofkeys[] = { { "ON", 0, ON }, { "OFF", 0, OFF }, }; keytab oftab = { (sizeof(ofkeys)/sizeof(keywrd)), ofkeys }; fdb offdb = { _CMKEY, 0, NULL, (pdat) &oftab, "Boolean, ", NULL, NULL }; fdb tok1fdb = { _CMTOK, 0, NULL, (pdat) "/", NULL, "/", NULL }; fdb tok2fdb = { _CMTOK, 0, NULL, (pdat) ":", NULL, ":", NULL }; fdb tok3fdb = { _CMTOK, 0, NULL, (pdat) "-", NULL, "-", NULL }; fdb tok4fdb = { _CMTOK, 0, NULL, (pdat) "=", NULL, "=", NULL }; fdb numfdb = { _CMNUM, CM_SDH, NULL, (pdat) 10, NULL, NULL, NULL }; fdb cfmfdb = { _CMCFM, 0, NULL, NULL, NULL, NULL, NULL }; fdb wrdfdb = { _CMFLD, CM_SDH, NULL, NULL, NULL, NULL, NULL }; fdb txtfdb = { _CMTXT, CM_SDH, NULL, NULL, NULL, NULL, NULL }; int done = FALSE; int c_add(), c_list(), c_check(), c_set(), c_help(), c_delete(); int Quit(), Version(), Take(); keywrd full[] = { { "Add", KEY_INV, (int) c_add }, { "Shutdown", 0, (int) c_add }, { "Check", 0, (int) c_check }, { "Delete", KEY_INV, (int) c_delete }, { "Cancel", 0, (int) c_delete }, { "Help", 0, (int) c_help }, { "List", 0, (int) c_list }, { "Quit", 0, (int) Quit }, { "Exit", KEY_INV, (int) Quit }, { "Set", 0, (int) c_set }, { "Take", 0, (int) Take }, { "Version", 0, (int) Version }, }; keytab fulltab = { (sizeof(full)/sizeof(keywrd)), full }; toplevel() { static fdb cmdfdb = { _CMKEY, 0, NULL, NULL, "Command, ", NULL, NULL }; extern char command[]; static int first = TRUE; char host[MAXHOSTNAMELEN], *p; if (first) { cmdfdb._cmdat = (pdat) &(fulltab); if (!*command) { /* cmcls(); /* clear the screen */ gethostname(host, sizeof(host)); p = index(host, '.'); if (p != NULL) { *p = NULL; } upstr(host); printf("UNIX %s on %s -- Version %s.\n", prog, host, version); } } while (done == FALSE) { cmseter(); if (cmcsb._cmerr == CMxEOF) break; if (!*command) { prompt(PROMPT); } else { prompt(""); fopen("/dev/null", "w+"); if (cmsti(command, CC_NEC) != CMxOK) fprintf(stderr, "Can't stuff buffer\n"); cmcsb._cmflg |= CM_CFM; /* mark buffer as confirmed */ cmcsb._cmbkc = '\n'; /* and this is the confirm char */ } cmsetrp(); if (*command && !first) return; first = FALSE; parse(&cmdfdb,&val,&used); (* (procptr) val._pvint)(FALSE); if (*command) return; } } /* * Quit - Exit the program. */ Quit() { if (iflag) { if (prog != NULL) noise(prog); confirm(); cmdone(); } exit(0); } /* * Version - print the version information. */ Version() { char buf[BUFSIZ]; extern char *version; strcpy(buf, "of "); strcat(buf, prog); noise(buf); confirm(); prversion(); } /* * Take - take input from file */ Take() { cmtake(toplevel); } /* * c_list - Ccmd list() command */ c_list() { noise("all downtime entries"); confirm(); return(listall()); } /* * c_check - Ccmd interface to checktime(). */ c_check() { noise("all downtime entries"); confirm(); return(checktime()); } /* * yes - See if the answer is Yes. */ yes(what) char *what; { char p[BUFSIZ]; sprintf(p, "%s this entry? ", what); prompt(p); cmsetrp(); parse(&ynfdb, &val, &used); confirm(); if (val._pvint == YES) { return(TRUE); } return(FALSE); } keywrd dtkeys[MAXENTRIES]; int numdtkeys = 0; keytab dttab = { 0, dtkeys }; fdb dtfdb = { _CMKEY, 0, NULL, (pdat) &dttab, "Entry Number, ", NULL, NULL }; /* * mkdtfdb - Makes a keywrd structure containing all downtime entries. */ fdb * mkdtfdb() { char buf[BUFSIZ]; int found = FALSE; struct downtime *d; dtrewind(); numdtkeys = 0; while (d = getdtent()) { found = TRUE; sprintf(buf, "%d-%s", numdtkeys + 1, mkdate(d->dt_down, D_CCMD)); dtkeys[numdtkeys]._kwkwd = (char *) xmalloc(strlen(buf)+1); strcpy(dtkeys[numdtkeys]._kwkwd, buf); dtkeys[numdtkeys]._kwval = (int) d; ++numdtkeys; dtkeys[numdtkeys]._kwkwd = NULL; } dttab._ktcnt = numdtkeys; if (!found) return(NULL); return(&dtfdb); }