This is Session.m in view mode; [Download] [Up]
/*
* For legal stuff see the file COPYRIGHT
*/
#import <sys/time.h>
#import <stdio.h>
#import <stdlib.h>
#import "Session.h"
#import "Preferences.h"
extern void freeAndCopy( char **ptr, const char *str );
extern char *NXCopyStringBuffer(const char *buffer);
@implementation Session
static ColDesc LayoutOne[] = {
{ 3.0, "startDateString", (SEL)0 },
{ 60.0, "startTimeString", (SEL)0 },
{ 100.0, "durationString", (SEL)0 },
{ 134.0, "description", (SEL)0 },
{ 0.0, NULL, (SEL)0 },
};
/*
* If the user selected the "ShowEndTimes" preference,
* the spacing gets wider to accomodate the additional info.
*/
static ColDesc LayoutTwo[] = {
{ 3.0, "startDateString", (SEL)0 },
{ 60.0, "sessionBounds", (SEL)0 },
{ 134.0, "durationString", (SEL)0 },
{ 170.0, "description", (SEL)0 },
{ 0.0, NULL, (SEL)0 },
};
+ initialize
{
ColDesc *ptr;
/* Initialize the selectors in the ColDesc table */
for ( ptr = LayoutOne; ptr->method; ptr++ )
ptr->selector = sel_getUid( ptr->method );
for ( ptr = LayoutTwo; ptr->method; ptr++ )
ptr->selector = sel_getUid( ptr->method );
return self;
}
- init:(const char *)startDate
time:(const char *)startTime
duration:(int)elapsedMinutes
description:(const char *)desc
{
[self setStartDateString:startDate];
[self setStartTimeString:startTime];
[self setDescription:desc];
minutes = elapsedMinutes;
return self;
}
- (void) freeDesc
{
if ( description ) {
free( description );
description = NULL;
}
}
- free
{
[self freeDesc];
return [super free];
}
- (ColDesc *)colDesc
{
return [[Preferences new] showEndTimes] ? LayoutTwo : LayoutOne;
}
- setMinutes:(int)value
{
minutes = value;
return self;
}
/* Must we parse the string and convert to UNIX format? Why bother? */
- setStartDateString:(const char *)str
{
freeAndCopy( &startDateString, str );
return self;
}
- setStartTimeString:(const char *)str
{
freeAndCopy( &startTimeString, str );
return self;
}
- setDescription:(const char *)desc
{
[self freeDesc];
description = NXCopyStringBuffer(desc);
return self;
}
- (const char *)startTimeString
{
return startTimeString;
}
- (const char *)sessionBounds
{
static char buf[80];
int startHr, startMin, endHr, endMin;
sscanf( startTimeString, "%d:%d", &startHr, &startMin );
endHr = startHr + minutes / 60;
endMin = startMin + minutes % 60;
if ( endMin > 59 )
endHr++;
endMin %= 60;
endHr %= 24;
sprintf( buf, "%02d:%02d-%02d:%02d", startHr, startMin, endHr, endMin );
return buf;
}
- (const char *)startDateString
{
return startDateString;
}
- (const char *)description
{
return description;
}
- (int)minutes
{
return minutes;
}
- (float)hours
{
return minutes/60.0;
}
- (const char *)durationString
{
static char buf[20];
sprintf( buf, "%d:%02d", minutes / 60, minutes % 60 );
return buf;
}
/*
* For use in comparisons, convert date such as 11/21/93 to a
* single integer 932111. THIS SHOULD BE CACHED! (TBD)
*/
- (int)dateValue
{
int day, month, year;
sscanf( startDateString, "%d/%d/%d", &month, &day, &year );
return ( year * 10000 + month * 100 + day );
}
/*
* Similarly, convert 12:45 to the integer 1245.
*/
- (int)timeValue
{
int minute, hour;
sscanf( startTimeString, "%d:%d", &hour, &minute );
return ( hour * 100 + minute );
}
- read:(NXTypedStream *) stream
{
NXReadTypes( stream, "***i", &description, &startTimeString,
&startDateString, &minutes );
return self;
}
- write:(NXTypedStream *) stream
{
NXWriteTypes( stream, "***i", &description, &startTimeString,
&startDateString, &minutes );
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.