2.9BSD/usr/contrib/notes/times.c
static char *sccsid = "@(#)times.c 1.1\t1/23/83";
#include "parms.h"
#include "structs.h"
/*
* getlast(atime, nf, seqon, name)
* struct when_f *atime; char *nf, *name
* retrieve last time that user was in the notefile.
* fixlast(atime, nf, seqon, name)
* struct when_f *atime; char *nf, *name
* update users last access time.
*
* Restructure of Original effort (Nov 1981 by R. Essick)
* Coding: Ray Essick January 1982
*/
long lseek (); /* make sure gets right type */
getlast (atime, nf, seqon, name)
struct when_f *atime;
char *nf,
*name;
{
FILE * seqfile;
FILE * fopen ();
struct seq_f entry;
register int retcode;
char fn[WDLEN];
atime->w_year = 1970; /* initialize to ancient history */
atime->w_month = 1;
atime->w_day = 1;
atime->w_hours = 0;
atime->w_mins = 0;
if (seqon) { /* grab entry only if the sequencer is on */
sprintf (fn, "%s/%s/%s", MSTDIR, SEQUENCER, name);
if ((seqfile = fopen (fn, "r")) == NULL) {
return(-1); /* no file, return default */
}
do {
retcode = fread (&entry, sizeof entry, 1, seqfile);
} while (retcode && strcmp (entry.nfname, nf) != 0);
fclose (seqfile); /* close the file */
if (strcmp (entry.nfname, nf) == 0) {
copydate (&entry.lastin, atime); /* give him time */
return(0);
} else {
return(-1);
}
}
return(0);
}
fixlast (atime, nf, seqon, name)
struct when_f *atime;
char *nf;
int seqon;
char *name;
{
struct seq_f entry;
register int fid; /* file descriptor */
register int atend;
char fn[WDLEN];
if (seqon) {
sprintf (fn, "%s/%s/%s", MSTDIR, SEQUENCER, name);
#ifdef BSD4.1c
if ((fid = open(fn, O_CREAT|O_RDWR, 0666)) < 0) {
printf("fixlast: could not open sequencer file\n");
exit(BAD);
}
#else
if ((fid = open(fn, 2)) < 0) { /* open up */
x ((fid = creat(fn, 0666)) < 0, "fixlast: create");
x (close(fid) < 0, "fixlast: close I");
x ((fid = open(fn, 2)) < 0, "fixlast: open write");
}
#endif BSD4.1c
while ((atend = read(fid, &entry, sizeof(entry))) == sizeof(entry)) {
if (strcmp (entry.nfname, nf) == 0) {
break; /* found him */
}
}
x (atend < 0, "fixlast: read error");
if (atend == sizeof(entry)) { /* not at the end */
x (lseek (fid, -((long) sizeof(entry)), 1) < 0, "fixlast: reseek");
} else {
strmove(nf, entry.nfname); /* build the entry */
x (lseek(fid, 0L, 2) < 0, "fixlast: EOF seek");
/* make sure at end */
}
copydate(atime, &entry.lastin);
x (write(fid, &entry, sizeof(entry)) != sizeof(entry), "fixlast: write");
x (close(fid) < 0, "fixlast: close II");
}
}