|
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 m
Length: 4749 (0x128d) Types: TextFile Names: »mailtime.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/elm/src/mailtime.c«
/** mailtime.c **/ /** This set of routines is used to figure out when the user last read their mail and to also figure out if a given message is new or not. (C) Copyright 1986 Dave Taylor **/ #include "headers.h" #include <sys/types.h> #include <sys/stat.h> #ifdef BSD # ifndef BSD4.1 # include <sys/time.h> # else # include <time.h> # include <sys/timeb.h> # endif #else # include <time.h> #endif resolve_received(entry) struct header_rec *entry; { /** Entry has the data for computing the time and date the message was received. Fix it and return **/ switch (tolower(entry->month[0])) { case 'j' : if (tolower(entry->month[1]) == 'a') entry->received.month = JANUARY; else if (tolower(entry->month[2]) == 'n') entry->received.month = JUNE; else entry->received.month = JULY; break; case 'f' : entry->received.month = FEBRUARY; break; case 'm' : if (tolower(entry->month[2]) == 'r') entry->received.month = MARCH; else entry->received.month = MAY; break; case 'a' : if (tolower(entry->month[1]) == 'p') entry->received.month = APRIL; else entry->received.month = AUGUST; break; case 's' : entry->received.month = SEPTEMBER; break; case 'o' : entry->received.month = OCTOBER; break; case 'n' : entry->received.month = NOVEMBER; break; case 'd' : entry->received.month = DECEMBER; break; } sscanf(entry->day, "%d", &(entry->received.day)); sscanf(entry->year, "%d", &(entry->received.year)); if (entry->received.year > 100) entry->received.year -= 1900; sscanf(entry->time, "%d:%d", &(entry->received.hour), &(entry->received.minute)); } get_mailtime() { /** Instantiate the values of the last_read_mail stat variable based on the file access time/date of the file mailtime_file. IF the file doesn't exist, then assume all mail is new. **/ struct stat buffer; struct tm *timebuf; char filename[SLEN]; #ifdef BSD extern struct tm *localtime(); #endif sprintf(filename, "%s/%s", home, mailtime_file); if (stat(filename, &buffer) == -1) { last_read_mail.month = 0; last_read_mail.day = 0; last_read_mail.year = 0; last_read_mail.hour = 0; last_read_mail.minute = 0; } else { /* stat okay... */ timebuf = (struct tm *) localtime(&(buffer.st_mtime)); last_read_mail.month = timebuf->tm_mon; last_read_mail.day = timebuf->tm_mday; last_read_mail.year = timebuf->tm_year; last_read_mail.hour = timebuf->tm_hour; last_read_mail.minute = timebuf->tm_min; } } update_mailtime() { /** This routine updates the last modified time of the .last_read_mail file in the users home directory. If the file doesn't exist, it creates it!! **/ char filename[SLEN]; #ifdef BSD # ifdef BSD4.1 struct timeb loc_time; time_t tval; # else struct timeval tval[2]; struct timezone tzone; # endif #endif sprintf(filename, "%s/%s", home, mailtime_file); #ifdef BSD # ifdef BSD4.1 tval = (time_t) time((long *) 0); if (utime(filename, &tval) == -1) # else gettimeofday(&tval[0], &tzone); gettimeofday(&tval[1], &tzone); if (utimes(filename, tval) == -1) /* note the "S" */ # endif #else if (utime(filename, NULL) == -1) /* note no "S" */ #endif /** That's what I like about programming for BSD & USG - the easy portability between 'em. Especially the section 2 calls!! **/ (void) creat(filename, 0777); } new_msg(entry) struct header_rec entry; { /** Return true if the current message is NEW. This can be easily tested by seeing 1) if we're reading the incoming mailbox and then, if so, 2) if the received_on_machine date is more recent than the last_read_mail date. **/ if (mbox_specified != 0) return(FALSE); /* not incoming */ /** Two tests - if received is OLDER than last read mail, then immediately return FALSE. If received is NEWER than last read mail then immediately return TRUE **/ if (entry.received.year < last_read_mail.year) return(FALSE); if (entry.received.year > last_read_mail.year) return(TRUE); if (entry.received.month < last_read_mail.month) return(FALSE); if (entry.received.month > last_read_mail.month) return(TRUE); if (entry.received.day < last_read_mail.day) return(FALSE); if (entry.received.day > last_read_mail.day) return(TRUE); if (entry.received.hour < last_read_mail.hour) return(FALSE); if (entry.received.hour > last_read_mail.hour) return(TRUE); if (entry.received.minute < last_read_mail.minute) return(FALSE); return(TRUE); }