+ // create path string for return value
+ wxString result( thePath ) ;
+#else
+ Handle myPath ;
+ short length ;
+
+ // get length of path and allocate handle
+ FSpGetFullPath( spec , &length , &myPath ) ;
+ ::SetHandleSize( myPath , length + 1 ) ;
+ ::HLock( myPath ) ;
+ (*myPath)[length] = 0 ;
+ if ((length > 0) && ((*myPath)[length-1] == ':'))
+ (*myPath)[length-1] = 0 ;
+
+ // create path string for return value
+ wxString result = wxMacMakeStringFromCString( *myPath ) ;
+
+ // free allocated handle
+ ::HUnlock( myPath ) ;
+ ::DisposeHandle( myPath ) ;
+#endif
+
+ return result ;
+}
+#ifndef __DARWIN__
+// Mac file names are POSIX (Unix style) under Darwin
+// therefore the conversion functions below are not needed
+
+static wxChar sMacFileNameConversion[ 1000 ] ;
+static char scMacFileNameConversion[ 1000 ] ;
+
+#endif
+void wxMacFilename2FSSpec( const char *path , FSSpec *spec )
+{
+ OSStatus err = noErr ;
+#ifdef __DARWIN__
+ FSRef theRef;
+
+ // get the FSRef associated with the POSIX path
+ err = FSPathMakeRef((const UInt8 *) path, &theRef, NULL);
+ // convert the FSRef to an FSSpec
+ err = FSGetCatalogInfo(&theRef, kFSCatInfoNone, NULL, NULL, spec, NULL);
+#else
+ if ( strchr( path , ':' ) == NULL )
+ {
+ // try whether it is a volume / or a mounted volume
+ strncpy( scMacFileNameConversion , path , 1000 ) ;
+ scMacFileNameConversion[998] = 0 ;
+ strcat( scMacFileNameConversion , ":" ) ;
+ err = FSpLocationFromFullPath( strlen(scMacFileNameConversion) , scMacFileNameConversion , spec ) ;
+ }
+ else
+ {
+ err = FSpLocationFromFullPath( strlen(path) , path , spec ) ;
+ }
+#endif
+}
+
+#if wxUSE_UNICODE
+WXDLLEXPORT void wxMacFilename2FSSpec( const wxChar *path , FSSpec *spec )
+{
+ return wxMacFilename2FSSpec( wxMacStringToCString( wxString( path ) ) , spec ) ;
+}
+#endif
+
+#ifndef __DARWIN__
+
+wxString wxMac2UnixFilename (const wxChar *str)
+{
+ wxChar *s = sMacFileNameConversion ;
+ wxStrcpy( s , str ) ;
+ if (s)
+ {
+ memmove( s+1 , s ,wxStrlen( s ) + 1 * sizeof(wxChar)) ;
+ if ( *s == ':' )
+ *s = '.' ;
+ else
+ *s = '/' ;
+
+ while (*s)
+ {
+ if (*s == ':')
+ *s = '/';
+ else
+ *s = wxTolower(*s); // Case INDEPENDENT
+ s++;