This is Timer.m in view mode; [Download] [Up]
//************************************************************************
//
// Timer.m.
//
// by Felipe A. Rodriguez
//
//
// This code is supplied "as is" the author makes no warranty as to its
// suitability for any purpose. This code is free and may be distributed
// in accordance with the terms of the:
//
// GNU GENERAL PUBLIC LICENSE
// Version 2, June 1991
// copyright (C) 1989, 1991 Free Software Foundation, Inc.
// 675 Mass Ave, Cambridge, MA 02139, USA
//
//************************************************************************
#import "Timer.h"
#import "Coordinator.h"
// used in producing timed events
static DPSTimedEntry timerTimeTag;
static void time_func();
@implementation Timer
//************************************************************************
//
// called by DPS timed entry
//
//************************************************************************
- timer:sender
{
time(<ime); // Get time and place in time_t
[self timerEngine:sender];
return self;
}
//************************************************************************
//
// online timer engine
//
//************************************************************************
- timerEngine:sender
{
static int hour, min;
static char tmpbuf[32];
// session
ltime -= StartTime; // time elapsed since start
hour = (int)floor((ltime/60)/60);
min = (int)floor(((((float)ltime/60.0)/60.0) - (float)hour) * 60.0);
sprintf(tmpbuf, "%d:%02d", hour, min);
[sessionView setStringValue:tmpbuf]; // session total
if(delegate && sender) // if we've been fired
[delegate showMenuTimer:tmpbuf];
// month
mtime = ltime + savedTime;
hour = (int)floor((mtime/60)/60);
min = (int)floor(((((float)mtime/60.0)/60.0) - (float)hour) * 60.0);
sprintf(tmpbuf, "%d:%02d", hour, min);
[monthView setStringValue:tmpbuf]; // mo total
return self;
}
//************************************************************************
//
// Fire timer
//
//************************************************************************
- Fire:sender
{
[self initFromDDB];
[self setDelegate:sender]; // he who fires us is our delegate
time(<ime); // Get time and place in time_t
StartTime = ltime; // store start time
if(!timerTimeTag)
timerTimeTag = DPSAddTimedEntry( // register function time_func
60.0, // to be called every period of
(DPSTimedEntryProc)time_func, // arg0
(id)self,
NX_BASETHRESHOLD);
[self timerEngine:self];
return self;
}
//************************************************************************
//
// Load timer nib
//
//************************************************************************
- showTimerPanel:sender
{
time_t pmtime;
int hour, min;
static char tmpbuf[32];
if(!timerPanel)
[NXApp loadNibSection:"Timer.nib" owner:self withNames:NO];
if(!delegate) // if not fired
{
[self initFromDDB];
time(<ime); // Get time and place in time_t
StartTime = ltime; // store start time
}
[self timer:nil];
// previous month
pmtime = (time_t)atol(NXGetDefaultValue([NXApp appName], "preMonthTime"));
hour = (int)floor((pmtime/60)/60);
min = (int)floor(((((float)pmtime/60.0)/60.0) - (float)hour) * 60.0);
sprintf(tmpbuf, "%d:%02d", hour, min);
[previousMonthView setStringValue:tmpbuf]; // pre mo total
[timerPanel setFrameUsingName:[timerPanel title]]; // remem loc/size
[timerPanel setFrameAutosaveName:[timerPanel title]]; // remem loc/size
[timerPanel makeKeyAndOrderFront:self];
return self;
}
//*****************************************************************************
//
// stop the timer by removing the DPS timed entry
//
//*****************************************************************************
- stopTimer
{
static char str[16];
if (timerTimeTag) // remove timed entry
DPSRemoveTimedEntry (timerTimeTag);
timerTimeTag = (DPSTimedEntry)0;
if(delegate) // if we've been fired
{ // save added time used
sprintf(str,"%ld", (long)mtime);
if(!NXWriteDefault([NXApp appName], "savedTime", str))
[[NXApp delegate] showAlert:"ddbWriteError"];
sprintf(str,"%ld", (long)monthTime); // save mo,yr of this ses'n
if(!NXWriteDefault([NXApp appName], "monthTime", str))
[[NXApp delegate] showAlert:"ddbWriteError"];
}
delegate = nil; // signal not fired
return self;
}
//*****************************************************************************
//
// designated initializer for timer
//
//*****************************************************************************
- init
{
[super init];
return [self initFromDDB];
}
- initFromDDB
{
int mo, yr;
static char str[16];
savedTime = (time_t)atol(NXGetDefaultValue([NXApp appName], "savedTime"));
monthTime = (time_t)atol(NXGetDefaultValue([NXApp appName], "monthTime"));
tmMonth = localtime(&monthTime); // Convert time_t to tm
mo = tmMonth->tm_mon;
yr = tmMonth->tm_year; // used because localtime doing weird thing
time(<ime); // Get time and place in time_t
timestamp = localtime(<ime); // Convert time_t to tm
if((0 != (timestamp->tm_mon - mo)) || (0 != (timestamp->tm_year - yr)))
{ // test for new mo,yr
sprintf(str,"%ld", (long)savedTime); // save mo,yr as previous
if(!NXWriteDefault([NXApp appName], "preMonthTime", str))
[[NXApp delegate] showAlert:"ddbWriteError"];
time(&monthTime);
savedTime = 0; // new mo or yr, reset
}
return self;
}
- free
{
if(timerPanel)
[timerPanel close];
[self stopTimer];
return [super free];
}
//*****************************************************************************
//
// set a delegate while we are in fired state
//
//*****************************************************************************
- setDelegate:anObject
{
delegate = anObject;
return self;
}
@end
//************************************************************************
//
// This fucntion is registered by DPSaddtimedentry.
// It is subsequently called every period t as registered
// in arg 0 of DPSaddtimedentry.
//
//************************************************************************
static void time_func(DPSTimedEntry time_tag, double now, id self)
{
[self timer:self];
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.