|
|
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 u
Length: 4553 (0x11c9)
Types: TextFile
Names: »upddbm.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Spacewar/upddbm.c«
/*
* Spacewar - update dbm(3) records
* for deleting old players and all associated records
* and for creating super and priviledged crafts
*
* Copyright 1985 obo Systems, Inc.
* Copyright 1985 Dan Rosenblatt
*/
#ifndef VMS
#include <sys/types.h>
#include <dbm.h>
#else /* BSD SYSIII SYSV */
#include <types.h>
#include "dbm.h"
#endif /* VMS */
#include "spacewar.h"
#include "universe.h"
#include "login.h"
#include "sys.h"
#include "crft.h"
#include "mlbx.h"
#include "plyr.h"
#include "ucmd.h"
main()
{
datum srchkey,dbmkey,dbmdata;
struct crftkey crk;
static struct crftkey zcrk;
struct crft crd;
struct mlbxkey mbk;
struct plyrkey plk;
struct plyr pld;
struct ucmdkey uck;
struct syskey sk;
struct sys s;
char *asctime(),*ctime(),*gets(),buf[32],dnam[100][8+1],*pnam;
int i,nd=0,atoi();
long atol();
if (dbminit(SWDATABASE)) {
perror(SWDATABASE);
exit(1);
}
/* get all players */
for (srchkey=firstkey();srchkey.dptr;srchkey=nextkey(srchkey)) {
if (srchkey.dptr[0] != PLYR)
continue;
/* show player name, last login time, and # of logins */
bcopy((char *)&plk,srchkey.dptr,sizeof(plk));
printf("'%s' ",plk.pl_name);
dbmdata = fetch(srchkey);
if (!dbmdata.dptr) {
printf("- can't fetch\n");
continue;
}
bcopy((char *)&pld,dbmdata.dptr,sizeof(pld));
printf("{%.24s} %d ",
#ifdef VMS
ctime(&pld.pl_lstlgn),
#else /* BSD SYSIII SYSV */
asctime(localtime(&pld.pl_lstlgn)),
#endif /* VMS BSD SYSIII SYSV */
pld.pl_numlgn);
/* prompt for delete or craft name to endow */
getcrnam: printf("(d/craftname)>");
gets(buf);
/* save player name to delete */
if (!strcmp(buf,"d"))
strcpy(dnam[nd++],plk.pl_name);
/* try to get craft */
else if (strlen(buf) > 1) {
crk = zcrk;
crk.cr_crftkey = CRAFT;
strcpy(crk.cr_plyr,plk.pl_name);
strcpy(crk.cr_name,buf);
dbmkey.dptr = (char *)&crk;
dbmkey.dsize = sizeof(crk);
dbmdata = fetch(dbmkey);
if (!dbmdata.dptr) {
printf("No such craft\n");
goto getcrnam; /* horrendous */
}
bcopy((char *)&crd,dbmdata.dptr,dbmdata.dsize);
printf("[htyp=%d] flsp=%ld crew=%ld plvl=%d\n",
crd.cr_htyp,crd.cr_flsp,crd.cr_crew,crd.cr_plvl);
printf("flsp>");
if (strlen(gets(buf)) > 0) crd.cr_flsp = atol(buf);
printf("crew>");
if (strlen(gets(buf)) > 0) crd.cr_crew = atol(buf);
printf("plvl>");
if (strlen(gets(buf)) > 0) crd.cr_plvl = atoi(buf);
dbmkey.dptr = (char *)&crk;
dbmdata.dptr = (char *)&crd;
if (store(dbmkey,dbmdata))
printf("Couldn't update craft\n");
}
}
printf("\nStarting delete loop\n\n");
/* go through all records requesting ok to delete those matching dnam */
for (srchkey=firstkey();srchkey.dptr;srchkey=nextkey(srchkey)) {
switch(srchkey.dptr[0]) {
case CRAFT:
bcopy((char *)&crk,srchkey.dptr,sizeof(crk));
pnam = crk.cr_plyr;
srchkey.dptr = (char *)&crk;
srchkey.dsize = sizeof(crk);
break;
case MLBX:
bcopy((char *)&mbk,srchkey.dptr,sizeof(mbk));
pnam = mbk.mb_plyr;
srchkey.dptr = (char *)&mbk;
srchkey.dsize = sizeof(mbk);
break;
case PLYR:
bcopy((char *)&plk,srchkey.dptr,sizeof(plk));
pnam = plk.pl_name;
srchkey.dptr = (char *)&plk;
srchkey.dsize = sizeof(plk);
break;
case SUBSYS:
bcopy((char *)&sk,srchkey.dptr,sizeof(sk));
pnam = sk.s_plyr;
srchkey.dptr = (char *)&sk;
srchkey.dsize = sizeof(sk);
break;
case UCMD:
bcopy((char *)&uck,srchkey.dptr,sizeof(uck));
pnam = uck.uc_plyr;
srchkey.dptr = (char *)&uck;
srchkey.dsize = sizeof(uck);
break;
default:
printf("Unknown key: '%c'\n",srchkey.dptr[0]);
if (delete(srchkey))
printf("Can't delete\n");
continue;
}
/* only if the name matches one in the list */
for (i=0;i < nd;++i)
if (!strcmp(pnam,dnam[i]))
break;
if (i >= nd) continue;
switch(srchkey.dptr[0]) {
case CRAFT:
printf("craft '%s' '%s'",crk.cr_plyr,crk.cr_name);
break;
case MLBX:
printf("mlbx '%s' %d",mbk.mb_plyr,mbk.mb_mlbx);
break;
case PLYR:
printf("plyr '%s'",plk.pl_name);
break;
case SUBSYS:
printf("sys '%s' '%s' %d",sk.s_plyr,sk.s_crft,
sk.s_type);
break;
case UCMD:
printf("ucmd '%s' '%s' %d",uck.uc_plyr,uck.uc_name,
uck.uc_ucmd);
break;
}
printf(" (d/)>");
if (!strcmp(gets(buf),"d") && delete(srchkey))
printf("Can't delete\n");
}
}