diff --git a/BasiliskII/src/MacOSX/clip_macosx64.cpp b/BasiliskII/src/MacOSX/clip_macosx64.cpp new file mode 100644 index 00000000..496e457a --- /dev/null +++ b/BasiliskII/src/MacOSX/clip_macosx64.cpp @@ -0,0 +1,313 @@ +/* + * clip_macosx64.cpp - Clipboard handling, MacOS X (Pasteboard Manager) implementation + * + * (C) 2012 Jean-Pierre Stierlin + * (C) 2012 Alexei Svitkine + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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 + */ + +#include "sysdeps.h" +#define _UINT64 +#include + +#include "clip.h" +#include "main.h" +#include "cpu_emulation.h" +#include "emul_op.h" + +#define DEBUG 0 +#include "debug.h" + +#ifndef FOURCC +#define FOURCC(a,b,c,d) (((uint32)(a) << 24) | ((uint32)(b) << 16) | ((uint32)(c) << 8) | (uint32)(d)) +#endif + +#define TYPE_PICT FOURCC('P','I','C','T') +#define TYPE_TEXT FOURCC('T','E','X','T') + +static PasteboardRef g_pbref; + +// Flag for PutScrap(): the data was put by GetScrap(), don't bounce it back to the MacOS X side +static bool we_put_this_data = false; + +static CFStringRef GetUTIFromFlavor(uint32 type) +{ + switch (type) { + case TYPE_PICT: return kUTTypePICT; + case TYPE_TEXT: return CFSTR("com.apple.traditional-mac-plain-text"); + //case TYPE_TEXT: return CFSTR("public.utf16-plain-text"); + //case FOURCC('s','t','y','l'): return CFSTR("????"); + case FOURCC('m','o','o','v'): return kUTTypeQuickTimeMovie; + case FOURCC('s','n','d',' '): return kUTTypeAudio; + //case FOURCC('u','t','x','t'): return CFSTR("public.utf16-plain-text"); + case FOURCC('u','t','1','6'): return CFSTR("public.utf16-plain-text"); + //case FOURCC('u','s','t','l'): return CFSTR("????"); + case FOURCC('i','c','n','s'): return kUTTypeAppleICNS; + default: return NULL; + } +} + +/* + * Get current system script encoding on Mac + */ + +#define smMacSysScript 18 +#define smMacRegionCode 40 + +static int GetMacScriptManagerVariable(uint16 id) +{ + int ret = -1; + M68kRegisters r; + static uint8 proc[] = { + 0x59, 0x4f, // subq.w #4,sp + 0x3f, 0x3c, 0x00, 0x00, // move.w #id,-(sp) + 0x2f, 0x3c, 0x84, 0x02, 0x00, 0x08, // move.l #-2080243704,-(sp) + 0xa8, 0xb5, // ScriptUtil() + 0x20, 0x1f, // move.l (a7)+,d0 + M68K_RTS >> 8, M68K_RTS + }; + r.d[0] = sizeof(proc); + Execute68kTrap(0xa71e, &r); // NewPtrSysClear() + uint32 proc_area = r.a[0]; + if (proc_area) { + Host2Mac_memcpy(proc_area, proc, sizeof(proc)); + WriteMacInt16(proc_area + 4, id); + Execute68k(proc_area, &r); + ret = r.d[0]; + r.a[0] = proc_area; + Execute68kTrap(0xa01f, &r); // DisposePtr + } + return ret; +} + +/* + * Convert utf-16 from/to system script encoding on Mac + */ + +CFDataRef ConvertMacTextEncoding(CFDataRef pbData, int from_host) +{ + static TextEncoding g_textEncodingHint = kTextEncodingUnknown; + static UnicodeMapping uMapping; + static UnicodeToTextInfo utInfo; + static TextToUnicodeInfo tuInfo; + static int ready; + + // should we check this only once ? + if (g_textEncodingHint == kTextEncodingUnknown) { + int script = GetMacScriptManagerVariable(smMacSysScript); + int region = GetMacScriptManagerVariable(smMacRegionCode); + if (UpgradeScriptInfoToTextEncoding(script, kTextLanguageDontCare, region, NULL, &g_textEncodingHint)) + g_textEncodingHint = kTextEncodingMacRoman; + uMapping.unicodeEncoding = CreateTextEncoding(kTextEncodingUnicodeV2_0, kTextEncodingDefaultVariant, kUnicode16BitFormat); + uMapping.otherEncoding = GetTextEncodingBase(g_textEncodingHint); + uMapping.mappingVersion = kUnicodeUseLatestMapping; + ready = !CreateUnicodeToTextInfo(&uMapping, &utInfo) && !CreateTextToUnicodeInfo(&uMapping, &tuInfo); + } + if (!ready) + return pbData; + + ByteCount byteCount = CFDataGetLength(pbData); + ByteCount outBytesLength = byteCount * 2; + LogicalAddress outBytesPtr = malloc(byteCount * 2); + if (!outBytesPtr) + return pbData; + + ByteCount outBytesConverted; + OSStatus err; + if (from_host) { + err = ConvertFromUnicodeToText(utInfo, byteCount, (UniChar *)CFDataGetBytePtr(pbData), + kUnicodeLooseMappingsMask, + 0, NULL, 0, NULL, + outBytesLength, + &outBytesConverted, &outBytesLength, outBytesPtr); + } else { + err = ConvertFromTextToUnicode(tuInfo, byteCount, CFDataGetBytePtr(pbData), + kUnicodeLooseMappingsMask, + 0, NULL, 0, NULL, + outBytesLength, + &outBytesConverted, &outBytesLength, (UniChar *)outBytesPtr); + } + + if (err == noErr && outBytesConverted == byteCount) { + CFDataRef pbDataConverted = CFDataCreate(kCFAllocatorDefault, (UInt8*)outBytesPtr, outBytesLength); + if (pbDataConverted) { + CFRelease(pbData); + pbData = pbDataConverted; + } + } + free(outBytesPtr); + + return pbData; +} + +/* + * Initialization + */ + +void ClipInit(void) +{ + OSStatus err = PasteboardCreate(kPasteboardClipboard, &g_pbref); + if (err) { + D(bug("could not create Pasteboard\n")); + g_pbref = NULL; + } +} + + +/* + * Deinitialization + */ + +void ClipExit(void) +{ + if (g_pbref) { + CFRelease(g_pbref); + g_pbref = NULL; + } +} + + +/* + * Mac application reads clipboard + */ + +void GetScrap(void **handle, uint32 type, int32 offset) +{ + D(bug("GetScrap handle %p, type %4.4s, offset %d\n", handle, &type, offset)); + + CFStringRef typeStr; + PasteboardSyncFlags syncFlags; + ItemCount itemCount; + + if (!g_pbref) + return; + + syncFlags = PasteboardSynchronize(g_pbref); + if (syncFlags & kPasteboardModified) + return; + + if (PasteboardGetItemCount(g_pbref, &itemCount)) + return; + + if (!(typeStr = GetUTIFromFlavor(type))) + return; + + for (UInt32 itemIndex = 1; itemIndex <= itemCount; itemIndex++) { + PasteboardItemID itemID; + CFDataRef pbData; + + if (PasteboardGetItemIdentifier(g_pbref, itemIndex, &itemID)) + break; + + if (!PasteboardCopyItemFlavorData(g_pbref, itemID, typeStr, &pbData)) { + if (type == TYPE_TEXT) + pbData = ConvertMacTextEncoding(pbData, TRUE); + if (pbData) { + // Allocate space for new scrap in MacOS side + M68kRegisters r; + r.d[0] = CFDataGetLength(pbData); + Execute68kTrap(0xa71e, &r); // NewPtrSysClear() + uint32 scrap_area = r.a[0]; + + // Get the native clipboard data + if (scrap_area) { + uint8 * const data = Mac2HostAddr(scrap_area); + + memcpy(data, CFDataGetBytePtr(pbData), CFDataGetLength(pbData)); + + // Add new data to clipboard + static uint8 proc[] = { + 0x59, 0x8f, // subq.l #4,sp + 0xa9, 0xfc, // ZeroScrap() + 0x2f, 0x3c, 0, 0, 0, 0, // move.l #length,-(sp) + 0x2f, 0x3c, 0, 0, 0, 0, // move.l #type,-(sp) + 0x2f, 0x3c, 0, 0, 0, 0, // move.l #outbuf,-(sp) + 0xa9, 0xfe, // PutScrap() + 0x58, 0x8f, // addq.l #4,sp + M68K_RTS >> 8, M68K_RTS & 0xff + }; + r.d[0] = sizeof(proc); + Execute68kTrap(0xa71e, &r); // NewPtrSysClear() + uint32 proc_area = r.a[0]; + + if (proc_area) { + Host2Mac_memcpy(proc_area, proc, sizeof(proc)); + WriteMacInt32(proc_area + 6, CFDataGetLength(pbData)); + WriteMacInt32(proc_area + 12, type); + WriteMacInt32(proc_area + 18, scrap_area); + we_put_this_data = true; + Execute68k(proc_area, &r); + + r.a[0] = proc_area; + Execute68kTrap(0xa01f, &r); // DisposePtr + } + + r.a[0] = scrap_area; + Execute68kTrap(0xa01f, &r); // DisposePtr + } + } + + CFRelease(pbData); + break; + } + } +} + + +/* + * Mac application wrote to clipboard + */ + +void PutScrap(uint32 type, void *scrap, int32 length) +{ + static bool clear = true; + D(bug("PutScrap type %4.4s, data %08lx, length %ld\n", &type, scrap, length)); + + PasteboardSyncFlags syncFlags; + CFStringRef typeStr; + + if (!g_pbref) + return; + + if (!(typeStr = GetUTIFromFlavor(type))) + return; + + if (we_put_this_data) { + we_put_this_data = false; + clear = true; + return; + } + if (length <= 0) + return; + + if (clear && PasteboardClear(g_pbref)) + return; + syncFlags = PasteboardSynchronize(g_pbref); + if ((syncFlags & kPasteboardModified) || !(syncFlags & kPasteboardClientIsOwner)) + return; + + CFDataRef pbData = CFDataCreate(kCFAllocatorDefault, (UInt8*)scrap, length); + if (!pbData) + return; + + if (type == TYPE_TEXT) + pbData = ConvertMacTextEncoding(pbData, FALSE); + + if (pbData) { + PasteboardPutItemFlavor(g_pbref, (PasteboardItemID)1, typeStr, pbData, 0); + CFRelease(pbData); + } +} diff --git a/SheepShaver/Makefile b/SheepShaver/Makefile index dde47390..a5e8e7c8 100644 --- a/SheepShaver/Makefile +++ b/SheepShaver/Makefile @@ -73,7 +73,7 @@ links: Unix/Darwin/lowmem.c Unix/Darwin/pagezero.c Unix/Darwin/testlmem.sh \ dummy/audio_dummy.cpp dummy/clip_dummy.cpp dummy/serial_dummy.cpp \ dummy/prefs_editor_dummy.cpp dummy/scsi_dummy.cpp SDL slirp \ - MacOSX/sys_darwin.cpp MacOSX/clip_macosx.cpp \ + MacOSX/sys_darwin.cpp MacOSX/clip_macosx.cpp MacOSX/clip_macosx64.cpp \ MacOSX/macos_util_macosx.h Unix/cpr.sh \ MacOSX/extfs_macosx.cpp Windows/clip_windows.cpp \ MacOSX/MacOSX_sound_if.cpp MacOSX/MacOSX_sound_if.h \ diff --git a/SheepShaver/src/MacOSX/SheepShaver.xcodeproj/project.pbxproj b/SheepShaver/src/MacOSX/SheepShaver.xcodeproj/project.pbxproj index ac3bb98a..9038fb72 100644 --- a/SheepShaver/src/MacOSX/SheepShaver.xcodeproj/project.pbxproj +++ b/SheepShaver/src/MacOSX/SheepShaver.xcodeproj/project.pbxproj @@ -50,7 +50,6 @@ 0856CFF314A99EF0000B1711 /* extfs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0856CD8C14A99EEF000B1711 /* extfs.cpp */; }; 0856CFF414A99EF0000B1711 /* gfxaccel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0856CD8D14A99EEF000B1711 /* gfxaccel.cpp */; }; 0856D00914A99EF0000B1711 /* macos_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0856CE0514A99EEF000B1711 /* macos_util.cpp */; }; - 0856D02414A99EF0000B1711 /* clip_macosx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0856CE2C14A99EF0000B1711 /* clip_macosx.cpp */; }; 0856D02514A99EF0000B1711 /* extfs_macosx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0856CE2D14A99EF0000B1711 /* extfs_macosx.cpp */; }; 0856D05014A99EF1000B1711 /* prefs_macosx.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0856CE7014A99EF0000B1711 /* prefs_macosx.mm */; }; 0856D05914A99EF1000B1711 /* SheepShaver.icns in Resources */ = {isa = PBXBuildFile; fileRef = 0856CE8314A99EF0000B1711 /* SheepShaver.icns */; }; @@ -119,6 +118,8 @@ 0873A76A14ABD151004F12B7 /* config-macosx-x86_64.h in Headers */ = {isa = PBXBuildFile; fileRef = 0873A76614ABD151004F12B7 /* config-macosx-x86_64.h */; }; 0873A76B14ABD151004F12B7 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 0873A76714ABD151004F12B7 /* config.h */; }; 0873A80214AC515D004F12B7 /* utils_macosx.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0873A80114AC515D004F12B7 /* utils_macosx.mm */; }; + 0885A52F1593E47F005C4F7B /* clip_macosx64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0851E9561593E22B00EE3FAD /* clip_macosx64.cpp */; }; + 08C99DA11593E79F00898E41 /* clip_macosx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0856CE2C14A99EF0000B1711 /* clip_macosx.cpp */; }; 08CD42DC14B7B85B009CA2A2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CD42DB14B7B85B009CA2A2 /* Cocoa.framework */; }; 08CD42E814B7B8AA009CA2A2 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CD42E714B7B8AA009CA2A2 /* Carbon.framework */; }; /* End PBXBuildFile section */ @@ -173,6 +174,20 @@ remoteGlobalIDString = 0873A53114AAF05A004F12B7; remoteInfo = dyngen; }; + 0885A5391593E4BC005C4F7B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0856CCAE14A99DE0000B1711 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0885A5201593E3B6005C4F7B; + remoteInfo = clip; + }; + 0885A53B1593E4BC005C4F7B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0856CCAE14A99DE0000B1711 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0885A52B1593E47F005C4F7B; + remoteInfo = clip64; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -199,6 +214,7 @@ 0846E52314B129DA00574779 /* ppc_asm.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = ppc_asm.S; sourceTree = ""; }; 0846E52814B129EE00574779 /* libppc_asm.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libppc_asm.a; sourceTree = BUILT_PRODUCTS_DIR; }; 0846E55214B12B0D00574779 /* paranoia.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = paranoia.cpp; sourceTree = ""; }; + 0851E9561593E22B00EE3FAD /* clip_macosx64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = clip_macosx64.cpp; sourceTree = ""; }; 0856CCC114A99E1C000B1711 /* SheepShaver.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SheepShaver.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0856CD4B14A99EEF000B1711 /* adb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = adb.cpp; path = ../adb.cpp; sourceTree = SOURCE_ROOT; }; 0856CD4C14A99EEF000B1711 /* audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio.cpp; path = ../audio.cpp; sourceTree = SOURCE_ROOT; }; @@ -412,6 +428,8 @@ 0873A76714ABD151004F12B7 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; 0873A80014AC515D004F12B7 /* utils_macosx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils_macosx.h; sourceTree = ""; }; 0873A80114AC515D004F12B7 /* utils_macosx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = utils_macosx.mm; sourceTree = ""; }; + 0885A5211593E3B6005C4F7B /* libclip.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libclip.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 0885A5341593E47F005C4F7B /* libclip64.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libclip64.a; sourceTree = BUILT_PRODUCTS_DIR; }; 08CD42DB14B7B85B009CA2A2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 08CD42E714B7B8AA009CA2A2 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; /* End PBXFileReference section */ @@ -470,6 +488,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0885A51F1593E3B6005C4F7B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0885A5301593E47F005C4F7B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -500,6 +532,8 @@ 0873A5CC14AB806D004F12B7 /* libppc-dyngen-ops.a */, 0846E49A14B124DE00574779 /* libkpx_cpu.a */, 0846E52814B129EE00574779 /* libppc_asm.a */, + 0885A5211593E3B6005C4F7B /* libclip.a */, + 0885A5341593E47F005C4F7B /* libclip64.a */, ); name = Products; sourceTree = ""; @@ -767,6 +801,7 @@ 0873A76514ABD151004F12B7 /* config */, 0856D2D614A9A704000B1711 /* Launcher */, 0856CE2C14A99EF0000B1711 /* clip_macosx.cpp */, + 0851E9561593E22B00EE3FAD /* clip_macosx64.cpp */, 0856CE2D14A99EF0000B1711 /* extfs_macosx.cpp */, 0856CE6D14A99EF0000B1711 /* macos_util_macosx.h */, 0856CE7014A99EF0000B1711 /* prefs_macosx.mm */, @@ -945,6 +980,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0885A51D1593E3B6005C4F7B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0885A52C1593E47F005C4F7B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -1018,6 +1067,8 @@ 0846E52E14B12A2E00574779 /* PBXTargetDependency */, 0846E4A714B1253500574779 /* PBXTargetDependency */, 082AC26814AA5A4800071F5E /* PBXTargetDependency */, + 0885A53A1593E4BC005C4F7B /* PBXTargetDependency */, + 0885A53C1593E4BC005C4F7B /* PBXTargetDependency */, ); name = SheepShaver; productName = SheepShaver; @@ -1078,6 +1129,40 @@ productReference = 0873A5CC14AB806D004F12B7 /* libppc-dyngen-ops.a */; productType = "com.apple.product-type.library.static"; }; + 0885A5201593E3B6005C4F7B /* clip */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0885A5241593E450005C4F7B /* Build configuration list for PBXNativeTarget "clip" */; + buildPhases = ( + 0885A51D1593E3B6005C4F7B /* Headers */, + 0885A51E1593E3B6005C4F7B /* Sources */, + 0885A51F1593E3B6005C4F7B /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = clip; + productName = clipboard; + productReference = 0885A5211593E3B6005C4F7B /* libclip.a */; + productType = "com.apple.product-type.library.static"; + }; + 0885A52B1593E47F005C4F7B /* clip64 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0885A5311593E47F005C4F7B /* Build configuration list for PBXNativeTarget "clip64" */; + buildPhases = ( + 0885A52C1593E47F005C4F7B /* Headers */, + 0885A52D1593E47F005C4F7B /* Sources */, + 0885A5301593E47F005C4F7B /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = clip64; + productName = clipboard; + productReference = 0885A5341593E47F005C4F7B /* libclip64.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1106,6 +1191,8 @@ 0873A67314AB8AE9004F12B7 /* ppc-execute-impl */, 0846E49914B124DE00574779 /* kpx_cpu */, 0846E52714B129EE00574779 /* ppc_asm */, + 0885A5201593E3B6005C4F7B /* clip */, + 0885A52B1593E47F005C4F7B /* clip64 */, ); }; /* End PBXProject section */ @@ -1277,7 +1364,6 @@ 0856CFF314A99EF0000B1711 /* extfs.cpp in Sources */, 0856CFF414A99EF0000B1711 /* gfxaccel.cpp in Sources */, 0856D00914A99EF0000B1711 /* macos_util.cpp in Sources */, - 0856D02414A99EF0000B1711 /* clip_macosx.cpp in Sources */, 0856D02514A99EF0000B1711 /* extfs_macosx.cpp in Sources */, 0856D05014A99EF1000B1711 /* prefs_macosx.mm in Sources */, 0856D05A14A99EF1000B1711 /* sys_darwin.cpp in Sources */, @@ -1363,6 +1449,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0885A51E1593E3B6005C4F7B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 08C99DA11593E79F00898E41 /* clip_macosx.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0885A52D1593E47F005C4F7B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0885A52F1593E47F005C4F7B /* clip_macosx64.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -1401,6 +1503,16 @@ target = 0873A53114AAF05A004F12B7 /* dyngen */; targetProxy = 0873A62614AB869A004F12B7 /* PBXContainerItemProxy */; }; + 0885A53A1593E4BC005C4F7B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0885A5201593E3B6005C4F7B /* clip */; + targetProxy = 0885A5391593E4BC005C4F7B /* PBXContainerItemProxy */; + }; + 0885A53C1593E4BC005C4F7B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0885A52B1593E47F005C4F7B /* clip64 */; + targetProxy = 0885A53B1593E4BC005C4F7B /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -1504,8 +1616,8 @@ INSTALL_PATH = /usr/local/lib; PREBINDING = NO; PRODUCT_NAME = kpx_cpu; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; - "SDKROOT[arch=i386]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; + "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; }; name = Debug; }; @@ -1673,12 +1785,21 @@ 0x3000, "-Wl,-seg1addr,0x78048000", "-lkpx_cpu", + "-lclip", ); "OTHER_LDFLAGS[arch=ppc]" = ( "-pagezero_size", 0x3000, "-Wl,-seg1addr,0x78048000", "-lppc_asm", + "-lclip", + ); + "OTHER_LDFLAGS[arch=x86_64]" = ( + "-pagezero_size", + 0x3000, + "-Wl,-seg1addr,0x78048000", + "-lkpx_cpu", + "-lclip64", ); PREBINDING = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; @@ -1744,7 +1865,7 @@ INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.4; - "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.6; + "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; OTHER_CFLAGS = ""; OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_LDFLAGS = ( @@ -1752,18 +1873,27 @@ 0x3000, "-Wl,-seg1addr,0x78048000", "-lkpx_cpu", + "-lclip", ); "OTHER_LDFLAGS[arch=ppc]" = ( "-pagezero_size", 0x3000, "-Wl,-seg1addr,0x78048000", "-lppc_asm", + "-lclip", + ); + "OTHER_LDFLAGS[arch=x86_64]" = ( + "-pagezero_size", + 0x3000, + "-Wl,-seg1addr,0x78048000", + "-lkpx_cpu", + "-lclip64", ); PREBINDING = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_NAME = SheepShaver; SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; - "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; + "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; ZERO_LINK = NO; }; name = Release; @@ -2034,6 +2164,130 @@ }; name = Release; }; + 0885A5221593E3B6005C4F7B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = ( + ppc, + i386, + ); + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = 4.0; + HEADER_SEARCH_PATHS = ( + /Library/Frameworks/SDL.framework/Versions/A/Headers/, + ./config/, + ../Unix, + ../MacOSX/Launcher, + ../slirp, + ../kpx_cpu/src, + ../kpx_cpu/include, + ../include, + ); + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = clip; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; + }; + name = Debug; + }; + 0885A5231593E3B6005C4F7B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = ( + ppc, + i386, + ); + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + GCC_VERSION = 4.0; + HEADER_SEARCH_PATHS = ( + /Library/Frameworks/SDL.framework/Versions/A/Headers/, + ./config/, + ../Unix, + ../MacOSX/Launcher, + ../slirp, + ../kpx_cpu/src, + ../kpx_cpu/include, + ../include, + ); + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = clip; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; + ZERO_LINK = NO; + }; + name = Release; + }; + 0885A5321593E47F005C4F7B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = 4.0; + HEADER_SEARCH_PATHS = ( + /Library/Frameworks/SDL.framework/Versions/A/Headers/, + ./config/, + ../Unix, + ../MacOSX/Launcher, + ../slirp, + ../kpx_cpu/src, + ../kpx_cpu/include, + ../include, + ); + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = clip64; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; + }; + name = Debug; + }; + 0885A5331593E47F005C4F7B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + GCC_VERSION = 4.0; + HEADER_SEARCH_PATHS = ( + /Library/Frameworks/SDL.framework/Versions/A/Headers/, + ./config/, + ../Unix, + ../MacOSX/Launcher, + ../slirp, + ../kpx_cpu/src, + ../kpx_cpu/include, + ../include, + ); + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = clip64; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; + ZERO_LINK = NO; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -2118,6 +2372,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 0885A5241593E450005C4F7B /* Build configuration list for PBXNativeTarget "clip" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0885A5221593E3B6005C4F7B /* Debug */, + 0885A5231593E3B6005C4F7B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0885A5311593E47F005C4F7B /* Build configuration list for PBXNativeTarget "clip64" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0885A5321593E47F005C4F7B /* Debug */, + 0885A5331593E47F005C4F7B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 0856CCAE14A99DE0000B1711 /* Project object */; diff --git a/SheepShaver/src/MacOSX/clip_macosx64.cpp b/SheepShaver/src/MacOSX/clip_macosx64.cpp new file mode 120000 index 00000000..806397aa --- /dev/null +++ b/SheepShaver/src/MacOSX/clip_macosx64.cpp @@ -0,0 +1 @@ +../../../BasiliskII/src/MacOSX/clip_macosx64.cpp \ No newline at end of file