diff options
author | Tim Angus <tim@ngus.net> | 2011-02-01 10:53:13 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2013-01-03 00:17:57 +0000 |
commit | e4f92f7675c9e8852435a2cba7f258c2364b9b9c (patch) | |
tree | 9c89d802b91cbbd2455c6148c1a905bdbea04d64 /src/sys | |
parent | e5888a4a883482474ff0da61b500dc7ba3f56273 (diff) |
* Apparently the mv didn't take, during the ioq3 merge
Diffstat (limited to 'src/sys')
-rw-r--r-- | src/sys/sys_osx.m | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/sys/sys_osx.m b/src/sys/sys_osx.m new file mode 100644 index 00000000..a26d8a28 --- /dev/null +++ b/src/sys/sys_osx.m @@ -0,0 +1,139 @@ +/* +=========================================================================== +Copyright (C) 1999-2005 Id Software, Inc. + +This file is part of Quake III Arena source code. + +Quake III Arena source code 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; either version 2 of the License, +or (at your option) any later version. + +Quake III Arena source code 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 Quake III Arena source code; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +#ifndef MACOS_X +#error This file is for Mac OS X only. You probably should not compile it. +#endif + +// Please note that this file is just some Mac-specific bits. Most of the +// Mac OS X code is shared with other Unix platforms in sys_unix.c ... + +#include "../qcommon/q_shared.h" +#include "../qcommon/qcommon.h" +#include "sys_local.h" + +#import <Carbon/Carbon.h> +#import <Cocoa/Cocoa.h> + +/* +================ +Sys_TempPath +================ +*/ +const char *Sys_TempPath( void ) +{ + static UInt8 posixPath[ MAX_OSPATH ]; + FSRef ref; + if( FSFindFolder( kOnAppropriateDisk, + kTemporaryFolderType, kCreateFolder, &ref ) == noErr ) + { + if( FSRefMakePath( &ref, posixPath, + sizeof( posixPath ) - 1 ) == noErr ) + { + return (const char *)posixPath; + } + } + + return "/tmp"; +} + +/* +============== +Sys_Dialog + +Display an OS X dialog box +============== +*/ +dialogResult_t Sys_Dialog( dialogType_t type, const char *message, const char *title ) +{ + dialogResult_t result = DR_OK; + NSAlert *alert = [NSAlert new]; + + [alert setMessageText: [NSString stringWithUTF8String: title]]; + [alert setInformativeText: [NSString stringWithUTF8String: message]]; + + if( type == DT_ERROR ) + [alert setAlertStyle: NSCriticalAlertStyle]; + else + [alert setAlertStyle: NSWarningAlertStyle]; + + switch( type ) + { + default: + [alert runModal]; + result = DR_OK; + break; + + case DT_YES_NO: + [alert addButtonWithTitle: @"Yes"]; + [alert addButtonWithTitle: @"No"]; + switch( [alert runModal] ) + { + default: + case NSAlertFirstButtonReturn: result = DR_YES; break; + case NSAlertSecondButtonReturn: result = DR_NO; break; + } + break; + + case DT_OK_CANCEL: + [alert addButtonWithTitle: @"OK"]; + [alert addButtonWithTitle: @"Cancel"]; + + switch( [alert runModal] ) + { + default: + case NSAlertFirstButtonReturn: result = DR_OK; break; + case NSAlertSecondButtonReturn: result = DR_CANCEL; break; + } + break; + } + + [alert release]; + + return result; +} + +/* +================= +Sys_StripAppBundle + +Discovers if passed dir is suffixed with the directory structure of a Mac OS X +.app bundle. If it is, the .app directory structure is stripped off the end and +the result is returned. If not, dir is returned untouched. +================= +*/ +char *Sys_StripAppBundle( char *dir ) +{ + static char cwd[MAX_OSPATH]; + + Q_strncpyz(cwd, dir, sizeof(cwd)); + if(strcmp(Sys_Basename(cwd), "MacOS")) + return dir; + Q_strncpyz(cwd, Sys_Dirname(cwd), sizeof(cwd)); + if(strcmp(Sys_Basename(cwd), "Contents")) + return dir; + Q_strncpyz(cwd, Sys_Dirname(cwd), sizeof(cwd)); + if(!strstr(Sys_Basename(cwd), ".app")) + return dir; + Q_strncpyz(cwd, Sys_Dirname(cwd), sizeof(cwd)); + return cwd; +} |