# HG changeset patch # User koda # Date 1263549811 0 # Node ID 41aa7b56c17b655da805027df8b550323bd96b27 # Parent ed789a7ef68d8314ec41acb5aef678ad7c45de96 settings are applied to game launch diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/GameSetup.h --- a/cocoaTouch/GameSetup.h Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/GameSetup.h Fri Jan 15 10:03:31 2010 +0000 @@ -7,12 +7,16 @@ // #import - +#import "SDL_net.h" @interface GameSetup : NSObject { NSString *localeString; NSDictionary *systemSettings; + BOOL engineProtocolStarted; + NSInteger ipcPort; + TCPsocket sd, csd; // Socket descriptor, Client socket descriptor + } @@ -22,6 +26,8 @@ -(void) setArgsForLocalPlay; -(void) engineProtocol; -(void) startThread: (NSString *)selector; - +-(void) loadSettingsFromFile:(NSString *)fileName forKey:(NSString *)objName; +-(int) sendToEngine: (NSString *)string; +-(void) unloadSettings; @end diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/GameSetup.m --- a/cocoaTouch/GameSetup.m Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/GameSetup.m Fri Jan 15 10:03:31 2010 +0000 @@ -11,22 +11,8 @@ #import "SDL_net.h" #import "PascalImports.h" - #define BUFFER_SIZE 256 - -// they should go in the interface -TCPsocket sd, csd; /* Socket descriptor, Client socket descriptor */ -NSInteger ipcPort; - -int sendToEngine (NSString * string) { - Uint8 length = [string length]; - - SDLNet_TCP_Send(csd, &length , 1); - return SDLNet_TCP_Send(csd, [string UTF8String], length); -} - - @implementation GameSetup @synthesize localeString, systemSettings; @@ -40,6 +26,14 @@ return self; } +-(void) dealloc { + [self.systemSettings release]; + [self.localeString autorelease]; + [super dealloc]; +} + +#pragma mark - +#pragma mark Thread/Network relevant code -(void) startThread: (NSString *) selector { SEL usage = NSSelectorFromString(selector); @@ -50,6 +44,13 @@ } } +-(int) sendToEngine: (NSString *)string { + Uint8 length = [string length]; + + SDLNet_TCP_Send(csd, &length , 1); + return SDLNet_TCP_Send(csd, [string UTF8String], length); +} + -(void) engineProtocol { IPaddress ip; int idx, eProto; @@ -100,77 +101,77 @@ // send config data data // local game - sendToEngine(@"TL"); + [self sendToEngine:@"TL"]; // seed info - sendToEngine(@"eseed {232c1b42-7d39-4ee6-adf8-4240e1f1efb8}"); + [self sendToEngine:@"eseed {232c1b42-7d39-4ee6-adf8-4240e1f1efb8}"]; // various flags - sendToEngine(@"e$gmflags 256"); + [self sendToEngine:@"e$gmflags 256"]; // various flags - sendToEngine(@"e$damagepct 100"); + [self sendToEngine:@"e$damagepct 100"]; // various flags - sendToEngine(@"e$turntime 45000"); + [self sendToEngine:@"e$turntime 45000"]; // various flags - sendToEngine(@"e$minestime 3000"); + [self sendToEngine:@"e$minestime 3000"]; // various flags - sendToEngine(@"e$landadds 4"); + [self sendToEngine:@"e$landadds 4"]; // various flags - sendToEngine(@"e$sd_turns 15"); + [self sendToEngine:@"e$sd_turns 15"]; // various flags - sendToEngine(@"e$casefreq 5"); + [self sendToEngine:@"e$casefreq 5"]; // various flags - sendToEngine(@"e$template_filter 1"); + [self sendToEngine:@"e$template_filter 1"]; // theme info - sendToEngine(@"etheme Freeway"); + [self sendToEngine:@"etheme Freeway"]; // team 1 info - sendToEngine(@"eaddteam 4421353 System Cats"); + [self sendToEngine:@"eaddteam 4421353 System Cats"]; // team 1 grave info - sendToEngine(@"egrave star"); + [self sendToEngine:@"egrave star"]; // team 1 fort info - sendToEngine(@"efort Earth"); + [self sendToEngine:@"efort Earth"]; // team 1 voicepack info - sendToEngine(@"evoicepack Classic"); + [self sendToEngine:@"evoicepack Classic"]; - // team 1 binds (skipped) + // team 1 binds (skipped) // team 1 members info - sendToEngine(@"eaddhh 0 100 Snow Leopard"); - sendToEngine(@"ehat NoHat"); + [self sendToEngine:@"eaddhh 0 100 Snow Leopard"]; + [self sendToEngine:@"ehat NoHat"]; // team 1 ammostore - sendToEngine(@"eammstore 93919294221991210322351110012010000002110404000441400444645644444774776112211144"); + [self sendToEngine:@"eammstore 93919294221991210322351110012010000002110404000441400444645644444774776112211144"]; // team 2 info - sendToEngine(@"eaddteam 4100897 Poke-MAN"); + [self sendToEngine:@"eaddteam 4100897 Poke-MAN"]; // team 2 grave info - sendToEngine(@"egrave Badger"); + [self sendToEngine:@"egrave Badger"]; // team 2 fort info - sendToEngine(@"efort UFO"); + [self sendToEngine:@"efort UFO"]; // team 2 voicepack info - sendToEngine(@"evoicepack Classic"); + [self sendToEngine:@"evoicepack Classic"]; // team 2 binds (skipped) // team 2 members info - sendToEngine(@"eaddhh 0 100 Raichu"); - sendToEngine(@"ehat Bunny"); + [self sendToEngine:@"eaddhh 0 100 Raichu"]; + [self sendToEngine:@"ehat Bunny"]; // team 2 ammostore - sendToEngine(@"eammstore 93919294221991210322351110012010000002110404000441400444645644444774776112211144"); + [self sendToEngine:@"eammstore 93919294221991210322351110012010000002110404000441400444645644444774776112211144"]; clientQuit = NO; } else { @@ -196,7 +197,7 @@ switch (buffer[0]) { case '?': NSLog(@"Ping? Pong!"); - sendToEngine(@"!"); + [self sendToEngine:@"!"]; break; case 'E': NSLog(@"ERROR - last console line: [%s]", buffer); @@ -240,13 +241,36 @@ [NSThread exit]; } +#pragma mark - +#pragma mark Settings setup methods +-(void) loadSettingsFromFile:(NSString *)fileName forKey:(NSString *)objName { + NSString *filePath = [SDLUIKitDelegate dataFilePath:fileName]; + + if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { + NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:filePath]; + [self setValue:dict forKey:objName]; + [dict release]; + } else { + //TODO create it + [NSException raise:@"File NOT found" format:@"The file %@ was not found at %@", fileName, filePath]; + } + +} + +-(void) unloadSettings { + for (id obj in self) + if ([obj isKindOfClass:[NSDictionary class]]) { + [obj release]; + } +} + -(void) setArgsForLocalPlay { - NSString *portNumber = [[NSString alloc] initWithFormat:@"%d",ipcPort]; + NSString *portNumber = [[NSString alloc] initWithFormat:@"%d", ipcPort]; + //NSString *username = [[NSString alloc] initWithString:[systemSettings objectForKey:@"username"]]; /*for (NSString *theString in [NSLocale ISOLanguageCodes]) { NSLog(theString); }*/ - memset(forward_argv, 0, forward_argc); forward_argc = 18; @@ -258,16 +282,16 @@ forward_argv[ 4] = "16"; // cBitsStr forward_argv[ 5] = [portNumber UTF8String]; // ipcPort; forward_argv[ 6] = "1"; // cFullScreen (NO EFFECT) - forward_argv[ 7] = "0"; // isSoundEnabled (TOSET) + forward_argv[ 7] = [[systemSettings objectForKey:@"effects"] UTF8String]; // isSoundEnabled forward_argv[ 8] = "1"; // cVSyncInUse (UNUSED) forward_argv[ 9] = [localeString UTF8String]; // cLocaleFName - forward_argv[10] = "100"; // cInitVolume (TOSET) + forward_argv[10] = [[systemSettings objectForKey:@"volume"] UTF8String]; // cInitVolume forward_argv[11] = "8"; // cTimerInterval forward_argv[12] = "Data"; // PathPrefix - forward_argv[13] = "1"; // cShowFPS (TOSET?) - forward_argv[14] = "0"; // cAltDamage (TOSET) - forward_argv[15] = "Koda"; // UserNick (DecodeBase64(ParamStr(15)) FTW) <- TODO - forward_argv[16] = "0"; // isMusicEnabled (TOSET) + forward_argv[13] = "1"; // cShowFPS (TOSET?) + forward_argv[14] = [[systemSettings objectForKey:@"alternate"] UTF8String]; // cAltDamage (TOSET) + forward_argv[15] = "Koda"; // UserNick (DecodeBase64(ParamStr(15)) FTW) <- TODO + forward_argv[16] = [[systemSettings objectForKey:@"music"] UTF8String]; // isMusicEnabled forward_argv[17] = "0"; // cReducedQuality [portNumber release]; @@ -276,11 +300,6 @@ --(void) dealloc { - [self.systemSettings release]; - [self.localeString autorelease]; - [super dealloc]; -} diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/MainMenuViewController.xib --- a/cocoaTouch/MainMenuViewController.xib Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/MainMenuViewController.xib Fri Jan 15 10:03:31 2010 +0000 @@ -12,7 +12,6 @@ YES - YES @@ -45,6 +44,7 @@ 274 {320, 431} + 3 MCAwAA @@ -62,6 +62,7 @@ 292 {{44, 131}, {232, 61}} + 1 MCAwIDAgMAA @@ -97,6 +98,7 @@ 292 {{20, 215}, {232, 61}} + 1 MCAwIDAgMAA @@ -122,6 +124,7 @@ 292 {{44, 298}, {232, 61}} + 1 MCAwIDAgMAA @@ -147,6 +150,7 @@ 292 {{44, 384}, {232, 21}} + NO YES NO @@ -168,6 +172,7 @@ {320, 431} + @@ -217,14 +222,6 @@ 12 - - versionLabel - - - - 14 - - notYetImplemented @@ -242,6 +239,14 @@ 16 + + + versionLabel + + + + 17 + @@ -346,7 +351,7 @@ - 16 + 17 diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/SDLOverrides/SDL_uikitappdelegate.h --- a/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.h Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.h Fri Jan 15 10:03:31 2010 +0000 @@ -41,6 +41,7 @@ +(SDLUIKitDelegate *)sharedAppDelegate; -(void) startSDLgame; +(void) resetFrontend; ++(NSString *)dataFilePath:(NSString *)fileName; int forward_argc; char **forward_argv; diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m --- a/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m Fri Jan 15 10:03:31 2010 +0000 @@ -28,13 +28,16 @@ #import "SDL_video.h" #import "GameSetup.h" +//#import "SoundEffect.h" +// SoundEffect *erasingSound = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"Erase" ofType:@"caf"]]; +// SoundEffect *selectSound = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"Select" ofType:@"caf"]]; + + #ifdef main #undef main #endif extern int SDL_main(int argc, char *argv[]); -BOOL isServerRunning = NO; - int main (int argc, char **argv) { int i; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; @@ -63,6 +66,13 @@ return (SDLUIKitDelegate *)[[UIApplication sharedApplication] delegate]; } +-(void) dealloc { + [setup release]; + [controller release]; + [window release]; + [super dealloc]; +} + -(void) launchSDL_main{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; @@ -78,34 +88,29 @@ -(IBAction) startSDLgame { [setup startThread:@"engineProtocol"]; - + [setup loadSettingsFromFile:@"settings.plist" forKey:@"systemSettings"]; + // remove the current view to free resources [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:1.5]; controller.view.alpha = 0; [UIView commitAnimations]; [controller.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.5]; - //[controller.view removeFromSuperview]; - + NSLog(@"Game is launching..."); [NSThread detachNewThreadSelector:@selector(launchSDL_main) toTarget:self withObject:nil]; - //SDL_main(forward_argc, forward_argv); - - } // override the direct execution of SDL_main to allow us to implement the frontend (even using a nib) -(void) applicationDidFinishLaunching:(UIApplication *)application { [application setStatusBarHidden:YES animated:NO]; - setup = [[GameSetup alloc] init]; + setup = [[GameSetup alloc] init]; /* Set working directory to resource path */ [[NSFileManager defaultManager] changeCurrentDirectoryPath: [[NSBundle mainBundle] resourcePath]]; -//#import "SoundEffect.h" -// SoundEffect *erasingSound = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"Erase" ofType:@"caf"]]; -// SoundEffect *selectSound = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"Select" ofType:@"caf"]]; + [window addSubview:controller.view]; [window makeKeyAndVisible]; } @@ -150,10 +155,12 @@ [SDLUIKitDelegate sharedAppDelegate].controller.view.alpha = 1; [UIView commitAnimations]; + [[SDLUIKitDelegate sharedAppDelegate].setup unloadSettings]; [[SDLUIKitDelegate sharedAppDelegate].window makeKeyAndVisible]; } - +#pragma mark - +#pragma mark Convenience methods void IPH_returnFrontend (void) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; @@ -165,11 +172,10 @@ } --(void) dealloc { - [setup release]; - [controller release]; - [window release]; - [super dealloc]; ++(NSString *)dataFilePath: (NSString *)fileName { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *documentsDirectory = [paths objectAtIndex:0]; + return [documentsDirectory stringByAppendingPathComponent:fileName]; } @end diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/SDLOverrides/SDL_uikitview.m --- a/cocoaTouch/SDLOverrides/SDL_uikitview.m Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitview.m Fri Jan 15 10:03:31 2010 +0000 @@ -166,7 +166,7 @@ // one tap - single click if (1 == [touch tapCount] ) { - //SDL_WarpMouseInWindow([SDLUIKitDelegate sharedAppDelegate].windowID, gestureStartPoint.x, gestureStartPoint.y); + SDL_WarpMouseInWindow([SDLUIKitDelegate sharedAppDelegate].windowID, gestureStartPoint.x, gestureStartPoint.y); HW_click(); } diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/SettingsViewController.h --- a/cocoaTouch/SettingsViewController.h Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/SettingsViewController.h Fri Jan 15 10:03:31 2010 +0000 @@ -14,6 +14,7 @@ UITextField *password; UISwitch *musicOn; UISwitch *effectsOn; + UISwitch *altDamageOn; UISlider *volumeSlider; UILabel *volumeLabel; } @@ -21,6 +22,7 @@ @property (nonatomic, retain) IBOutlet UITextField *password; @property (nonatomic, retain) IBOutlet UISwitch *musicOn; @property (nonatomic, retain) IBOutlet UISwitch *effectsOn; +@property (nonatomic, retain) IBOutlet UISwitch *altDamageOn; @property (nonatomic, retain) IBOutlet UISlider *volumeSlider; @property (nonatomic, retain) IBOutlet UILabel *volumeLabel; diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/SettingsViewController.m --- a/cocoaTouch/SettingsViewController.m Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/SettingsViewController.m Fri Jan 15 10:03:31 2010 +0000 @@ -7,21 +7,14 @@ // #import "SettingsViewController.h" - +#import "SDL_uikitappdelegate.h" @implementation SettingsViewController -@synthesize username, password, musicOn, effectsOn, volumeSlider, volumeLabel; - --(NSString *)dataFilePath: (NSString *)fileName { - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString *documentsDirectory = [paths objectAtIndex:0]; - return [documentsDirectory stringByAppendingPathComponent:fileName]; -} - +@synthesize username, password, musicOn, effectsOn, altDamageOn, volumeSlider, volumeLabel; -(void) viewDidLoad { - NSString *filePath = [self dataFilePath:@"settings.plist"]; + NSString *filePath = [SDLUIKitDelegate dataFilePath:@"settings.plist"]; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { NSUserDefaults *data = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; @@ -37,20 +30,28 @@ } else { effectsOn.on = NO; } + if (1 == [[data objectForKey:@"alternate"] intValue]) { + altDamageOn.on = YES; + } else { + altDamageOn.on = NO; + } + [volumeSlider setValue:[[data objectForKey:@"volume"] intValue] animated:NO]; + NSString *tmpVol = [[NSString alloc] initWithFormat:@"%d", (int) volumeSlider.value]; volumeLabel.text = tmpVol; [tmpVol release]; + } else { + [NSException raise:@"File NOT found" format:@"The file settings.plist was not found at %@", filePath]; } - - /* UIApplication *app = [UIApplication sharedApplication]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:app]; -*/ [super viewDidLoad]; +*/ + [super viewDidLoad]; } -(void) viewDidUnload { @@ -58,6 +59,7 @@ self.password = nil; self.musicOn = nil; self.effectsOn = nil; + self.altDamageOn = nil; self.volumeLabel = nil; self.volumeSlider = nil; [super viewDidUnload]; @@ -68,14 +70,16 @@ NSMutableDictionary *saveArray = [[NSMutableDictionary alloc] init]; NSString *tmpMus = (musicOn.on) ? @"1" : @"0"; NSString *tmpEff = (effectsOn.on) ? @"1" : @"0"; + NSString *tmpAlt = (altDamageOn.on) ? @"1" : @"0"; [saveArray setObject:username.text forKey:@"username"]; [saveArray setObject:password.text forKey:@"password"]; [saveArray setObject:tmpMus forKey:@"music"]; [saveArray setObject:tmpEff forKey:@"effects"]; + [saveArray setObject:tmpAlt forKey:@"alternate"]; [saveArray setObject:volumeLabel.text forKey:@"volume"]; - [saveArray writeToFile:[self dataFilePath:@"settings.plist"] atomically:YES]; + [saveArray writeToFile:[SDLUIKitDelegate dataFilePath:@"settings.plist"] atomically:YES]; [saveArray release]; [super viewWillDisappear:animated]; } @@ -88,11 +92,13 @@ } */ +// makes the keyboard go away when background is tapped -(IBAction) backgroundTap: (id)sender { [username resignFirstResponder]; [password resignFirstResponder]; } +// makes the keyboard go away when "Done" is tapped -(IBAction) textFieldDoneEditing: (id)sender { [sender resignFirstResponder]; } @@ -110,6 +116,7 @@ [password release]; [musicOn release]; [effectsOn release]; + [altDamageOn release]; [volumeLabel release]; [volumeSlider release]; [super dealloc]; diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/SettingsViewController.xib --- a/cocoaTouch/SettingsViewController.xib Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/SettingsViewController.xib Fri Jan 15 10:03:31 2010 +0000 @@ -40,7 +40,7 @@ 292 YES - + 274 {320, 431} @@ -53,7 +53,7 @@ Background.png - + 292 {{130, 135}, {152, 31}} @@ -67,7 +67,7 @@ 3 MAA - + 2 @@ -79,7 +79,7 @@ 9 - + 292 {{130, 174}, {152, 31}} @@ -93,7 +93,7 @@ 3 MAA - + YES YES @@ -104,7 +104,7 @@ YES - + 292 {{38, 373}, {243, 23}} @@ -118,10 +118,10 @@ 100 NO - + 292 - {{188, 242}, {94, 27}} + {{188, 224}, {94, 27}} NO YES @@ -130,10 +130,10 @@ 0 YES - + 292 - {{188, 294}, {94, 27}} + {{188, 279}, {94, 27}} NO YES @@ -142,7 +142,7 @@ 0 YES - + 292 {{56, 316}, {42, 21}} @@ -159,6 +159,18 @@ 1 10 + + + 292 + {{188, 330}, {94, 27}} + + NO + YES + YES + 0 + 0 + YES + {320, 431} @@ -184,7 +196,7 @@ username - + 13 @@ -192,7 +204,7 @@ password - + 14 @@ -200,7 +212,7 @@ musicOn - + 15 @@ -208,7 +220,7 @@ effectsOn - + 16 @@ -224,7 +236,7 @@ textFieldDoneEditing: - + 20 @@ -233,7 +245,7 @@ textFieldDoneEditing: - + 20 @@ -243,7 +255,7 @@ volumeLabel - + 21 @@ -251,14 +263,14 @@ volumeSlider - + 23 sliderChanged: - + 3 @@ -267,12 +279,20 @@ sliderChanged: - + 4 26 + + + altDamageOn + + + + 28 + @@ -288,13 +308,14 @@ YES - - - - - - - + + + + + + + + @@ -311,37 +332,42 @@ 4 - + 5 - + 6 - + 7 - + 8 - + 9 - + 20 - + + + + + 27 + @@ -356,6 +382,7 @@ 1.IBEditorWindowLastContentRect 1.IBPluginDependency 20.IBPluginDependency + 27.IBPluginDependency 4.IBPluginDependency 5.IBPluginDependency 6.IBPluginDependency @@ -377,6 +404,7 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -395,7 +423,7 @@ - 26 + 28 @@ -422,6 +450,7 @@ YES YES + altDamageOn effectsOn musicOn password @@ -433,6 +462,7 @@ YES UISwitch UISwitch + UISwitch UITextField UITextField UILabel @@ -575,7 +605,7 @@ NSObject - + IBFrameworkSource UIKit.framework/Headers/UIResponder.h @@ -607,7 +637,7 @@ UIResponder NSObject - + UISearchBar @@ -644,14 +674,14 @@ UITextField UIControl - + IBFrameworkSource UIKit.framework/Headers/UITextField.h UIView - + UIView diff -r ed789a7ef68d -r 41aa7b56c17b cocoaTouch/otherSrc/PascalImports.h --- a/cocoaTouch/otherSrc/PascalImports.h Thu Jan 14 16:46:50 2010 +0000 +++ b/cocoaTouch/otherSrc/PascalImports.h Fri Jan 15 10:03:31 2010 +0000 @@ -38,4 +38,4 @@ } #endif -#endif \ No newline at end of file +#endif