+
+static char sMacFileNameConversion[ 1000 ] ;
+
+wxString wxMac2UnixFilename (const char *str)
+{
+ char *s = sMacFileNameConversion ;
+ strcpy( s , str ) ;
+ if (s)
+ {
+ memmove( s+1 , s ,strlen( s ) + 1) ;
+ if ( *s == ':' )
+ *s = '.' ;
+ else
+ *s = '/' ;
+
+ while (*s)
+ {
+ if (*s == ':')
+ *s = '/';
+ else
+ *s = wxTolower (*s); // Case INDEPENDENT
+ s++;
+ }
+ }
+ return wxString (sMacFileNameConversion) ;
+}
+
+wxString wxUnix2MacFilename (const char *str)
+{
+ char *s = sMacFileNameConversion ;
+ strcpy( s , str ) ;
+ if (s)
+ {
+ if ( *s == '.' )
+ {
+ // relative path , since it goes on with slash which is translated to a :
+ memmove( s , s+1 ,strlen( s ) ) ;
+ }
+ else if ( *s == '/' )
+ {
+ // absolute path -> on mac just start with the drive name
+ memmove( s , s+1 ,strlen( s ) ) ;
+ }
+ else
+ {
+ wxASSERT_MSG( 1 , "unkown path beginning" ) ;
+ }
+ while (*s)
+ {
+ if (*s == '/' || *s == '\\')
+ {
+ // convert any back-directory situations
+ if ( *(s+1) == '.' && *(s+2) == '.' && ( (*(s+3) == '/' || *(s+3) == '\\') ) )
+ {
+ *s = ':';
+ memmove( s+1 , s+3 ,strlen( s+3 ) + 1 ) ;
+ }
+ else
+ *s = ':';
+ }
+
+ s++ ;
+ }
+ }
+ return wxString (sMacFileNameConversion) ;
+}
+
+wxString wxMacFSSpec2MacFilename( const FSSpec *spec )
+{
+ Handle myPath ;
+ short length ;
+
+ FSpGetFullPath( spec , &length , &myPath ) ;
+ ::SetHandleSize( myPath , length + 1 ) ;
+ ::HLock( myPath ) ;
+ (*myPath)[length] = 0 ;
+ if ( length > 0 && (*myPath)[length-1] ==':' )
+ (*myPath)[length-1] = 0 ;
+
+ wxString result( (char*) *myPath ) ;
+ ::HUnlock( myPath ) ;
+ ::DisposeHandle( myPath ) ;
+ return result ;
+}
+
+wxString wxMacFSSpec2UnixFilename( const FSSpec *spec )
+{
+ return wxMac2UnixFilename( wxMacFSSpec2MacFilename( spec) ) ;
+}
+
+void wxMacFilename2FSSpec( const char *path , FSSpec *spec )