This is TimerController.m in view mode; [Download] [Up]
#import "TimerController.h"
#import "TimerListener.h"
#import "ClockView.h"
#import "sys/time.h"
#import <soundkit/Sound.h>
@implementation TimerController
- resetUnits {
struct timeval tp;
struct timezone tzp;
gettimeofday(&tp,&tzp);
lastUnitStart = tp.tv_sec;
[clockView setValue:1.0];
[units setIntValue:1];
return self;
}
- resetUnits:sender {
return [self resetUnits];
}
static void stepClock(DPSTimedEntry teNumber,double now,void *userData) {
TimerController *self = (TimerController*)userData;
struct timeval tp;
struct timezone tzp;
struct tm *aTm;
int taktLen;
gettimeofday(&tp,&tzp);
aTm = localtime(&(tp.tv_sec));
if( (aTm->tm_wday==6||aTm->tm_wday==0)&&![self->feierTag state] )
[self->feierTag setState:YES];
if( [self->feierTag state]||aTm->tm_hour>=18||aTm->tm_hour<8 )
taktLen = 12;
else
taktLen = 6;
if( taktLen!=[self->takt intValue] )
[self->takt setIntValue:taktLen];
taktLen *= 60;
if( self->lastUnitStart+taktLen<=tp.tv_sec ) {
// Neue Einheit
[self->units setIntValue:[self->units intValue]+1];
self->lastUnitStart += taktLen;
[[Sound findSoundFor:"Bonk"] play];
}
{
float aVal = (float)(self->lastUnitStart+taktLen
-tp.tv_sec)/taktLen;
[self->clockView setValue:aVal];
if( self->lastUnitStart+taktLen-tp.tv_sec<20 )
[[Sound findSoundFor:"Tink"] play];
}
}
- exit {
[NXApp terminate:self];
return self;
}
- init {
struct timeval tp;
struct timezone tzp;
gettimeofday(&tp,&tzp);
lastUnitStart = tp.tv_sec;
DPSAddTimedEntry(1.0,stepClock,(void *)self,NX_BASETHRESHOLD);
return self;
}
- appWillInit:sender {
[NXApp setAppListener:[[TimerListener new] init]];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.