This is appointmentFile.m in view mode; [Download] [Up]
/* kfc - Kurt's Free Calendar Copyright 1995 Kurt Werle This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #import "appointmentFile.h" #import "anAppointment.h" #import <misckit/MiscString.h> #import <misckit/MiscFile.h> @implementation appointmentFile - initWithPath:(const char *)fullPath { [super init]; myFile = [[MiscFile alloc] initWithPath:fullPath]; if (!myFile) { return nil; } needSaving = NO; appointmentList = nil; myController = nil; return self; } - initWithPath:(const char *)fullPath WithController:newController { if (self = [self initWithPath:fullPath]) { [self setController:newController]; return self; } return nil; } - setController:newController { myController = newController; return self; } - addAppointment:newAppointment { if (appointmentList == nil) { appointmentList = [[List alloc] init]; } [appointmentList addObject:newAppointment]; [newAppointment setIsEditable:((int)[myFile access:MISCFILE_WRITE] == MISCFILE_SUCCESS)]; return self; } - removeAppointment:theAppointment { int oldCount = [appointmentList count], newCount; if (appointmentList != nil) { [appointmentList removeObject:theAppointment]; } newCount = [appointmentList count]; needSaving = needSaving || (newCount != oldCount); return self; } - (List *) appointmentList { return appointmentList; } - (id)myFile { return myFile; } - appointmentChanged:sender { needSaving = YES; return self; } - (BOOL)hasBeenEdited { return needSaving; } - saveFile:sender { if (appointmentList != nil) { int i; FILE *myDataFile; /* char mybuf[MAXPATHLEN]; strcpy (mybuf, NXHomeDirectory ()); strcat (mybuf, "/appointments.kfc"); */ myDataFile = fopen ([myFile fullPath], "wt"); if (!myDataFile) { return self; } needSaving = NO; for (i = 0; i < [appointmentList count]; i++) { /* Save the appointment's date */ fprintf (myDataFile, "REM "); switch ([[appointmentList objectAt:i] weekDay]) { case 0: { fprintf (myDataFile, " Sunday"); break; } case 1: { fprintf (myDataFile, " Monday"); break; } case 2: { fprintf (myDataFile, " Tuesday"); break; } case 3: { fprintf (myDataFile, " Wednesday"); break; } case 4: { fprintf (myDataFile, " Thursday"); break; } case 5: { fprintf (myDataFile, " Friday"); break; } case 6: { fprintf (myDataFile, " Saturday"); break; } } switch ([[appointmentList objectAt:i] month]) { case 0: fprintf (myDataFile, " Jan"); break; case 1: fprintf (myDataFile, " Feb"); break; case 2: fprintf (myDataFile, " Mar"); break; case 3: fprintf (myDataFile, " Apr"); break; case 4: fprintf (myDataFile, " May"); break; case 5: fprintf (myDataFile, " Jun"); break; case 6: fprintf (myDataFile, " Jul"); break; case 7: fprintf (myDataFile, " Aug"); break; case 8: fprintf (myDataFile, " Sep"); break; case 9: fprintf (myDataFile, " Oct"); break; case 10: fprintf (myDataFile, " Nov"); break; case 11: fprintf (myDataFile, " Dec"); break; default: break; } switch ([[appointmentList objectAt:i] day]) { case -1: break; default: fprintf (myDataFile, " %d",[[appointmentList objectAt:i] day] + 1); } switch ([[appointmentList objectAt:i] year]) { case -1: break; default: fprintf (myDataFile, " %d",[[appointmentList objectAt:i] year]); } /* Handle the modifiers */ if ([[appointmentList objectAt:i] back]) { fprintf (myDataFile, " --%d",[[appointmentList objectAt:i] back]); } if ([[appointmentList objectAt:i] delta]) { fprintf (myDataFile, " ++%d",[[appointmentList objectAt:i] delta]); } if ([[appointmentList objectAt:i] repeat]) { fprintf (myDataFile, " *%d",[[appointmentList objectAt:i] repeat]); } /* Do the until date - not just for repeats!!! if ([[appointmentList objectAt:i] repeat] != 0)*/ { int aDay, aMonth, aYear; [[appointmentList objectAt:i] untilYear:&aYear Month:&aMonth Day:&aDay]; switch (aMonth) { case 0: fprintf (myDataFile, " UNTIL Jan %d %d", aDay + 1, aYear); break; case 1: fprintf (myDataFile, " UNTIL Feb %d %d", aDay + 1, aYear); break; case 2: fprintf (myDataFile, " UNTIL Mar %d %d", aDay + 1, aYear); break; case 3: fprintf (myDataFile, " UNTIL Apr %d %d", aDay + 1, aYear); break; case 4: fprintf (myDataFile, " UNTIL May %d %d", aDay + 1, aYear); break; case 5: fprintf (myDataFile, " UNTIL Jun %d %d", aDay + 1, aYear); break; case 6: fprintf (myDataFile, " UNTIL Jul %d %d", aDay + 1, aYear); break; case 7: fprintf (myDataFile, " UNTIL Aug %d %d", aDay + 1, aYear); break; case 8: fprintf (myDataFile, " UNTIL Sep %d %d", aDay + 1, aYear); break; case 9: fprintf (myDataFile, " UNTIL Oct %d %d", aDay + 1, aYear); break; case 10: fprintf (myDataFile, " UNTIL Nov %d %d", aDay + 1, aYear); break; case 11: fprintf (myDataFile, " UNTIL Dec %d %d", aDay + 1, aYear); break; default: /* Month not set, so no until date ! */ break; } } /* Do the priority */ if ([[appointmentList objectAt:i] priority]) { fprintf (myDataFile, " PRIORITY %d", [[appointmentList objectAt:i] priority]); } /* Now do the time */ if ([[appointmentList objectAt:i] hour] != -1) { fprintf (myDataFile, " AT %2d:%2d",[[appointmentList objectAt:i] hour], [[appointmentList objectAt:i] minute]); if ([[appointmentList objectAt:i] tdelta]) { fprintf (myDataFile, " +%d", [[appointmentList objectAt:i] tdelta]); if ([[appointmentList objectAt:i] trepeat]) { fprintf (myDataFile, " *%d", [[appointmentList objectAt:i] trepeat]); } } } /* Finally save the message */ { MiscString *tempString = [[MiscString alloc] initString: [[[appointmentList objectAt:i] appointmentText] stringValue]]; [tempString replaceEveryOccurrenceOfRegex:"\n" with:" \\\n"]; fprintf (myDataFile, " MSG %s\n",[tempString stringValue]); [tempString free]; } } fclose (myDataFile); } return self; } - free { if (myFile) [myFile free]; if (appointmentList != nil) { [appointmentList freeObjects]; [appointmentList free]; } return[super free]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.