This is Today.m in view mode; [Download] [Up]
// // Today.m // Copyright (c) 1989, 1990 by Jiro Nakamura // All rights reserved // // by Jiro Nakamura (ac6y@vax5.cit.cornell.edu) // // RCS Information // Revision Number-> $Revision: 2.6 $ // Last Revised-> $Date: 90/12/03 01:56:40 $ // static char rcsid[] = "$Id: Today.m,v 2.6 90/12/03 01:56:40 jiro Exp Locker: jiro $"; #import "Today.h" #import "Global.h" #import "Event.h" #import "cass.h" // for TODAY_ICON #import "calendar.h" // for ascMyDate() #import <appkit/Application.h> // for NX_MODALRESPTHRESHOLD #import <appkit/ScrollView.h> #import <sys/time.h> #import <sys/file.h> #import <libc.h> #import <strings.h> @implementation Today - open:sender { static alreadyInited = FALSE; if( !alreadyInited) { char dumbChar[5]; // dumb references to some static constants, just // to avoid warning messages from the compiler (Garance) dumbChar[0] = rcsid[0]; // dumb de dumb alreadyInited = TRUE; [self placeWindow: [global todayFrame]]; } [self setWindowIcon: TODAY_ICON]; [self openWith: ""]; textView = [textScroll docView]; [textView setDelegate : self]; [textView setMonoFont: FALSE]; [textView setEditable: FALSE]; miniaturized = FALSE; [self setDelegate: self]; return self; } - save { // This window shouldn't save itself. [self setDocEdited: FALSE]; [textView becomeFirstResponder]; return self; } - close { [global saveThisWindowPosition: DEFAULTTODAYFRAME : self]; [super close]; miniaturized = FALSE; return self; } - update { NXStream *output; Event *ev; int today, temp; static struct tm time; if( miniaturized || [self isVisible]) { time = *timeNow(); // We want to read the eventFile pointed to by global ev = [Event newAt:[global eventFile]]; // We need a temporary memory stream to store the queue. if( (output = NXOpenMemory( NULL, 0, NX_READWRITE)) == NULL) { fprintf(stderr,"%s: Couldn't open memory stream for " "Today queue scrollview. FATAL ERRROR.\n", PROGNAME); exit(1) ; } [ev firstEvent]; today = [ev mday]; /* If the first event is today, then we just won't print anything */ if( ([ev mday] != time.tm_mday) || ([ev mon] != time.tm_mon) || ([ev year] != time.tm_year)) today = -1; NXPrintf(output, "{\\rtf0\\ansi{\\fonttbl\\f0\\fmodern " "%s;}\\fs%.0f\n", [global fontName], [global fontSize] * 2); if( [ev present] == 0 || today == -1) NXPrintf(output, "{\\f0Nothing for today.\\par\\par}\n"); /* Print all events for today regardless of priority */ while ( [ev present] != 0 && [ev mday] == today) { if( [ev priority] > [global highPriority]) NXPrintf(output, "{\\f0\\b "); else NXPrintf(output, "{\\f0 "); if( [global militaryTime]) NXPrintf(output, "%2d:%02d %s\\par}\n", [ev hour], [ev min], [ev message]); else { temp = [ev hour]; if( temp > 12 ) temp -= 12; if( temp == 0 ) temp = 12; NXPrintf(output, "%2d:%02d %s " "%s\\par}\n", temp, [ev min], ([ev hour]>11)?"pm":"am", [ev message]); } [ev readEvent : [ev next]]; } // Get ready to print everything for tomorrow today = [ev mday]; time.tm_mday ++; fixTmStructure( &time ); // If the next event isn't tomorrow, then // say that there is nothing tomorrow if( ([ev mday] != time.tm_mday) || ([ev mon] != time.tm_mon) || ([ev year] != time.tm_year)) today = -1; NXPrintf(output, "{\\f0 -------------\\par}\n"); if( [ev present] == 0 || today == -1) NXPrintf(output, "{\\f0 Nothing for tomorrow.}\n"); else NXPrintf(output, "{\\f0\\b Tomorrow: %s\\par\\par}\n", ascMyDate( &time)); while ( [ev present] != 0 && [ev mday] == today) { if( [ev priority] > [global highPriority]) NXPrintf(output, "{\\f0\\b "); else NXPrintf(output, "{\\f0 "); if( [global militaryTime]) NXPrintf(output, "%2d:%02d " "%s\\par}\n", [ev hour], [ev min], [ev message]); else { temp = [ev hour]; if( temp > 12 ) temp -= 12; if( temp == 0 ) temp = 12; NXPrintf(output, "%2d:%02d %s " "%s\\par}\n", temp, [ev min], ([ev hour]>11)? "pm":"am", [ev message]); } [ev readEvent : [ev next]]; } NXPrintf(output, "}\n"); NXSeek(output, 0, NX_FROMSTART); [textView readRichText: output]; NXCloseMemory(output, NX_FREEBUFFER); [self setDocEdited: FALSE]; [textView becomeFirstResponder]; [textView hideCaret]; // for some reason the Text [textView update]; // object sometimes leaves a caret... [ev free]; [self timeUpdate: self]; } return self; } - timeUpdate:sender { static char *timeMark; static char buf[30]; static struct tm time; extern const char *shortMonths[12]; extern const char *shortWeekDays[7]; if ( !miniaturized && [self isVisible]) { time = *timeNow(); if (!showTime) { if( !miniaturized) sprintf(buf, "%s - Today", ascMyDate(&time)); else sprintf(buf, "%s %s %2d", shortWeekDays[time.tm_wday], shortMonths[time.tm_mon], time.tm_mday); } else { if( [self isVisible]) sprintf(buf, "%s - Today", ascMyTime(&time, showSeconds, militaryTime)); else { if( minute == time.tm_min) return self; else minute = time.tm_min; hour = time.tm_hour; if( militaryTime) timeMark = ""; else { if (hour > 11) timeMark = "p"; else timeMark = "a"; if (hour > 12) hour -= 12; if (hour == 0) hour = 12; } sprintf(buf, "%d:%02d%s %d/%d", hour, time.tm_min, timeMark, time.tm_mon+1, time.tm_mday); } } [self setTitle:buf]; } return self; } - defaultsDidChange: sender { #ifdef DEBUG fprintf(stderr,"Defaults changed.... Overview compensating\n"); #endif militaryTime = [global militaryTime]; showSeconds = [global showSeconds]; showTime = [global todayShowTime]; [self update]; return self; } - windowDidMiniaturize: sender { #ifdef DEBUG fprintf(stderr,"Today did miniaturize\n"); #endif miniaturized = TRUE; minute = -1; // Force a redisplay on reopening return self; } - windowDidDeminiaturize: sender { #ifdef DEBUG fprintf(stderr,"Today did deminiaturize\n"); #endif miniaturized = FALSE; minute = -1; // Force a redisplay [self timeUpdate:self]; return self; } -setGlobal:anObject { global = anObject; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.