|
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 d
Length: 3438 (0xd6e) Types: TextFile Names: »dbm.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Spacewar/dbm.c«
/* * NOTE: VMS only */ #include "dbm.h" #include <rms.h> #include <stdio.h> static struct FAB dbmfab; static struct RAB dbmrab; static struct XABKEY dbmxab; static char *dbmfile; static char reckey[24],recdat[512]; dbminit(file) char *file; { int e; dbmfile = file; dbmfab=cc$rms_fab; dbmrab=cc$rms_rab; dbmxab=cc$rms_xabkey; /* open the file */ dbmfab.fab$b_fac = FAB$M_PUT + FAB$M_GET + FAB$M_DEL + FAB$M_UPD; dbmfab.fab$b_shr = FAB$M_SHRPUT + FAB$M_SHRGET + FAB$M_SHRDEL + FAB$M_SHRUPD; dbmfab.fab$l_fna = file; dbmfab.fab$b_fns = strlen(file); dbmfab.fab$l_xab = &dbmxab; if ((e=sys$open(&dbmfab)) != RMS$_KFF && e != RMS$_NORMAL) { fprintf(stderr,"dbminit 1 rms=%x ",e); return(-1); } /* set up for record I/O */ dbmrab.rab$l_fab = &dbmfab; dbmrab.rab$b_krf = 0; if ((e=sys$connect(&dbmrab)) != RMS$_NORMAL) { fprintf(stderr,"dbminit 2 rms=%x ",e); return(-1); } return(0); } dbmclose() { int e; if ((e=sys$close(&dbmfab)) != RMS$_NORMAL) { fprintf(stderr,"dbmclose rms=%x ",e); return(-1); } return(0); } datum fetch(key) datum key; { datum rec; int e; rec.dptr = (char *)0; dbmrab.rab$b_rac = RAB$C_KEY; dbmrab.rab$w_usz = sizeof(recdat); dbmrab.rab$l_ubf = recdat; dbmrab.rab$l_kbf = key.dptr; dbmrab.rab$b_ksz = key.dsize; dbmrab.rab$l_rop = RAB$M_NLK; if ((e=sys$get(&dbmrab)) != RMS$_NORMAL && e != RMS$_RNF) { fprintf(stderr,"fetch rms=%x ",e); } if (e == RMS$_NORMAL) { rec.dptr = dbmrab.rab$l_rbf + sizeof(reckey); rec.dsize = dbmrab.rab$w_rsz - sizeof(reckey); } return(rec); } dbmdelete(key) datum key; { int e; dbmrab.rab$b_rac = RAB$C_KEY; dbmrab.rab$l_kbf = key.dptr; dbmrab.rab$b_ksz = key.dsize; dbmrab.rab$l_rop = RAB$M_FDL; if ((e=sys$find(&dbmrab)) != RMS$_NORMAL && e != RMS$_RNF) { fprintf(stderr,"dbmdelete 1 rms=%x ",e); } if (e == RMS$_NORMAL) { if ((e=sys$delete(&dbmrab)) != RMS$_NORMAL) { fprintf(stderr,"dbmdelete 2 rms=%x ",e); return(-1); } return(0); } else return(-1); } store(key, dat) datum key, dat; { int e; dbmrab.rab$b_rac = RAB$C_KEY; binit(recdat,sizeof(reckey)); bcopy(recdat,key.dptr,key.dsize); bcopy(recdat+sizeof(reckey),dat.dptr,dat.dsize); dbmrab.rab$l_kbf = recdat; dbmrab.rab$b_ksz = sizeof(reckey); dbmrab.rab$l_rbf = recdat; dbmrab.rab$w_rsz = sizeof(reckey) + dat.dsize; dbmrab.rab$l_rop = RAB$M_LOA + RAB$M_UIF; if ((e=sys$put(&dbmrab)) != RMS$_NORMAL) { fprintf(stderr,"store rms=%x ",e); return(-1); } return(0); } datum firstkey() { datum key; int e; key.dptr = (char *)0; dbmrab.rab$b_rac = RAB$C_SEQ; if ((e=sys$rewind(&dbmrab)) != RMS$_NORMAL) { fprintf(stderr,"firstkey 1 rms=%x ",e); } if (e == RMS$_NORMAL) { dbmrab.rab$l_rop = RAB$M_NLK; dbmrab.rab$w_usz = sizeof(recdat); dbmrab.rab$l_ubf = recdat; if ((e=sys$get(&dbmrab)) != RMS$_NORMAL && e != RMS$_EOF) { fprintf(stderr,"firstkey 2 rms=%x ",e); } if (e == RMS$_NORMAL) { key.dptr = dbmrab.rab$l_rbf; key.dsize = sizeof(reckey); } } return(key); } datum nextkey(xkey) datum xkey; { datum key; int e; key.dptr = (char *)0; dbmrab.rab$b_rac = RAB$C_SEQ; dbmrab.rab$l_rop = RAB$M_NLK; dbmrab.rab$w_usz = sizeof(recdat); dbmrab.rab$l_ubf = recdat; if ((e=sys$get(&dbmrab)) != RMS$_NORMAL && e != RMS$_EOF) { fprintf(stderr,"nextkey rms=%x ",e); } if (e == RMS$_NORMAL) { key.dptr = dbmrab.rab$l_rbf; key.dsize = sizeof(reckey); } return(key); }