strangely enough, the new sdl rotation code is incompatible with our system... this is a workaround that should hold up until their code becomes more stable
/* * Hedgewars-iOS, a Hedgewars port for iOS devices * Copyright (c) 2009-2010 Vittorio Giovara <vittorio.giovara@gmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * File created on 08/04/2010. */#import "CommodityFunctions.h"#import <sys/types.h>#import <sys/sysctl.h>#import <mach/mach.h>#import <mach/mach_host.h>#import <QuartzCore/QuartzCore.h>#import <AudioToolbox/AudioToolbox.h>#import <CommonCrypto/CommonDigest.h>#import "PascalImports.h"BOOL inline rotationManager (UIInterfaceOrientation interfaceOrientation) { return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);}NSInteger inline randomPort () { srandom(time(NULL)); NSInteger res = (random() % 64511) + 1024; return (res == DEFAULT_NETGAME_PORT) ? randomPort() : res;}void popError (const char *title, const char *message) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithUTF8String:title] message:[NSString stringWithUTF8String:message] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; [alert release];}// by http://landonf.bikemonkey.org/code/iphone/Determining_Available_Memory.20081203.htmlvoid print_free_memory () { mach_port_t host_port; mach_msg_type_number_t host_size; vm_size_t pagesize; host_port = mach_host_self(); host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); host_page_size(host_port, &pagesize); vm_statistics_data_t vm_stat; if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) DLog(@"Failed to fetch vm statistics"); /* Stats in bytes */ natural_t mem_used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pagesize; natural_t mem_free = vm_stat.free_count * pagesize; natural_t mem_total = mem_used + mem_free; DLog(@"used: %u free: %u total: %u", mem_used, mem_free, mem_total);}BOOL inline isApplePhone () { return (IS_IPAD() == NO);}NSString *modelType () { size_t size; // set 'oldp' parameter to NULL to get the size of the data returned so we can allocate appropriate amount of space sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *name = (char *)malloc(sizeof(char) * size); // get the platform name sysctlbyname("hw.machine", name, &size, NULL, 0); NSString *modelId = [NSString stringWithUTF8String:name]; free(name); return modelId;}void playSound (NSString *snd) { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSNumber *audio = [prefs objectForKey:@"audio"]; if (audio == nil || [audio boolValue] == YES) { // get the filename of the sound file: NSString *path = [NSString stringWithFormat:@"%@/%@.wav",[[NSBundle mainBundle] resourcePath],snd]; // declare a system sound id and get a URL for the sound file SystemSoundID soundID; NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO]; // use audio sevices to create and play the sound AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID); AudioServicesPlaySystemSound(soundID); }}NSArray inline *getAvailableColors (void) { return [NSArray arrayWithObjects:[NSNumber numberWithUnsignedInt:0x3376E9], // bluette [NSNumber numberWithUnsignedInt:0x3e9321], // greeeen [NSNumber numberWithUnsignedInt:0xa23dbb], // violett [NSNumber numberWithUnsignedInt:0xff9329], // oranngy [NSNumber numberWithUnsignedInt:0xdd0000], // reddish [NSNumber numberWithUnsignedInt:0x737373], // graaaay [NSNumber numberWithUnsignedInt:0x00FFFF], // cyannnn [NSNumber numberWithUnsignedInt:0xFF8888], // peachyj nil];}UILabel *createBlueLabel (NSString *title, CGRect frame) { return createLabelWithParams(title, frame, 1.5f, UICOLOR_HW_YELLOW_BODER, UICOLOR_HW_DARKBLUE);}UILabel *createLabelWithParams (NSString *title, CGRect frame, CGFloat borderWidth, UIColor *borderColor, UIColor *backgroundColor) { UILabel *theLabel = [[UILabel alloc] initWithFrame:frame]; theLabel.backgroundColor = backgroundColor; if (title != nil) { theLabel.text = title; theLabel.textColor = UICOLOR_HW_YELLOW_TEXT; theLabel.textAlignment = UITextAlignmentCenter; theLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]*80/100]; } [theLabel.layer setBorderWidth:borderWidth]; [theLabel.layer setBorderColor:borderColor.CGColor]; [theLabel.layer setCornerRadius:8.0f]; [theLabel.layer setMasksToBounds:YES]; return theLabel;}// this routine checks for the PNG size without loading it in memory// https://github.com/steipete/PSFramework/blob/master/PSFramework%20Version%200.3/PhotoshopFramework/PSMetaDataFunctions.mCGSize PSPNGSizeFromMetaData (NSString *aFileName) { // File Name to C String. const char *fileName = [aFileName UTF8String]; // source file FILE *infile = fopen(fileName, "rb"); if (infile == NULL) { DLog(@"Can't open the file: %@", aFileName); return CGSizeZero; } // Bytes Buffer. unsigned char buffer[30]; // Grab Only First Bytes. fread(buffer, 1, 30, infile); // Close File. fclose(infile); // PNG Signature. unsigned char png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10}; // Compare File signature. if ((int)(memcmp(&buffer[0], &png_signature[0], 8))) { DLog(@"The file (%@) is not a PNG file", aFileName); return CGSizeZero; } // Calc Sizes. Isolate only four bytes of each size (width, height). int width[4]; int height[4]; for (int d = 16; d < (16 + 4); d++) { width[d-16] = buffer[d]; height[d-16] = buffer[d+4]; } // Convert bytes to Long (Integer) long resultWidth = (width[0] << (int)24) | (width[1] << (int)16) | (width[2] << (int)8) | width[3]; long resultHeight = (height[0] << (int)24) | (height[1] << (int)16) | (height[2] << (int)8) | height[3]; // Return Size. return CGSizeMake(resultWidth,resultHeight);}@implementation NSString (extra)-(NSString *)MD5hash { const char *cStr = [self UTF8String]; unsigned char result[16]; CC_MD5( cStr, strlen(cStr), result ); return [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15]];}@end