This is calendar.c in view mode; [Download] [Up]
static char rcsid[] = "@(#)$Id: calendar.c,v 5.2 1992/11/26 00:46:50 syd Exp $"; /******************************************************************************* * The Elm Mail System - $Revision: 5.2 $ $State: Exp $ * * Copyright (c) 1988-1992 USENET Community Trust * Copyright (c) 1986,1987 Dave Taylor ******************************************************************************* * Bug reports, patches, comments, suggestions should be sent to: * * Syd Weinstein, Elm Coordinator * elm@DSI.COM dsinc!elm * ******************************************************************************* * $Log: calendar.c,v $ * Revision 5.2 1992/11/26 00:46:50 syd * Fix how errno is used so err is inited and used instead * as errno gets overwritten by print system call * From: Syd * * Revision 5.1 1992/10/03 22:58:40 syd * Initial checkin as of 2.4 Release at PL0 * * ******************************************************************************/ /** This routine implements a rather snazzy idea suggested by Warren Carithers of the Rochester Institute of Technology that allows mail to contain entries formatted in a manner that will allow direct copying into a users calendar program. All lines in the current message beginning with "->", e.g. -> Mon 04/21 1:00p meet with chairman candidate get copied into the user's calendar file. **/ #include "headers.h" #ifdef ENABLE_CALENDAR /* if not defined, this will be an empty file */ #include <errno.h> #include <s_error.h> extern int errno; char *error_description(), *strcpy(); scan_calendar() { FILE *calendar; int count; int err; /* First step is to open the calendar file for appending... **/ if (can_open(calendar_file, "a") != 0) { err = errno; dprint(2, (debugfile, "Error: wrong permissions to append to calendar %s\n", calendar_file)); dprint(2, (debugfile, "** - %s **\n", error_description(err))); error1(catgets(elm_msg_cat, ErrorSet, ErrorCalendarCanOpen, "Not able to append to file %s!"), calendar_file); return; } save_file_stats(calendar_file); if ((calendar = fopen(calendar_file,"a")) == NULL) { err = errno; dprint(2, (debugfile, "Error: couldn't append to calendar file %s (scan)\n", calendar_file)); dprint(2, (debugfile, "** - %s **\n", error_description(err))); error1(catgets(elm_msg_cat, ErrorSet, ErrorCalendarAppend, "Couldn't append to file %s!"), calendar_file); return; } count = extract_info(calendar); fclose(calendar); restore_file_stats(calendar_file); if (count > 0) { if (count > 1) error1(catgets(elm_msg_cat, ErrorSet, ErrorCalendarSavedPlural, "%d entries saved in calendar file."), count); else error(catgets(elm_msg_cat, ErrorSet, ErrorCalendarSaved, "1 entry saved in calendar file.")); } else error(catgets(elm_msg_cat, ErrorSet, ErrorCalendarNoneSaved, "No calendar entries found in that message.")); return; } int extract_info(save_to_fd) FILE *save_to_fd; { /** Save the relevant parts of the current message to the given calendar file. The only parameter is an opened file descriptor, positioned at the end of the existing file **/ register int entries = 0, lines; int line_length; char buffer[SLEN], *cp, *is_cal_entry(); /** get to the first line of the message desired **/ if (fseek(mailfile, headers[current-1]->offset, 0) == -1) { dprint(1,(debugfile, "ERROR: Attempt to seek %d bytes into file failed (%s)", headers[current-1]->offset, "extract_info")); error1(catgets(elm_msg_cat, ErrorSet, ErrorCalendarSeek, "ELM [seek] failed trying to read %d bytes into file."), headers[current-1]->offset); return(0); } /* how many lines in message? */ lines = headers[current-1]->lines; /* now while not EOF & still in message... scan it! */ while (lines) { if((line_length = mail_gets(buffer, SLEN, mailfile)) == 0) break; if(buffer[line_length - 1] == '\n') lines--; /* got a full line */ if((cp = is_cal_entry(buffer)) != NULL) { entries++; fprintf(save_to_fd,"%s", cp); } } dprint(4,(debugfile, "Got %d calender entr%s.\n", entries, entries > 1? "ies":"y")); return(entries); } char * is_cal_entry(string) register char *string; { /* If string is of the form * {optional white space} ->{optional white space} {stuff} * return a pointer to stuff, otherwise return NULL. */ while( whitespace(*string) ) string++; /* strip leading W/S */ if(strncmp(string, "->", 2) == 0) { for(string +=2 ; whitespace(*string); string++) ; return(string); } return(NULL); } #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.