+#ifdef __WXMAC__
+
+const short kMacExtensionMaxLength = 16 ;
+class MacDefaultExtensionRecord
+{
+public :
+ MacDefaultExtensionRecord()
+ {
+ m_ext[0] = 0 ;
+ m_type = m_creator = NULL ;
+ }
+ MacDefaultExtensionRecord( const MacDefaultExtensionRecord& from )
+ {
+ strcpy( m_ext , from.m_ext ) ;
+ m_type = from.m_type ;
+ m_creator = from.m_creator ;
+ }
+ MacDefaultExtensionRecord( const char * extension , OSType type , OSType creator )
+ {
+ strncpy( m_ext , extension , kMacExtensionMaxLength ) ;
+ m_ext[kMacExtensionMaxLength] = 0 ;
+ m_type = type ;
+ m_creator = creator ;
+ }
+ char m_ext[kMacExtensionMaxLength] ;
+ OSType m_type ;
+ OSType m_creator ;
+} ;
+
+#include "wx/dynarray.h"
+WX_DECLARE_OBJARRAY(MacDefaultExtensionRecord, MacDefaultExtensionArray) ;
+
+bool gMacDefaultExtensionsInited = false ;
+
+#include "wx/arrimpl.cpp"
+
+WX_DEFINE_EXPORTED_OBJARRAY(MacDefaultExtensionArray) ;
+
+MacDefaultExtensionArray gMacDefaultExtensions ;
+
+static void MacEnsureDefaultExtensionsLoaded()
+{
+ if ( !gMacDefaultExtensionsInited )
+ {
+
+ // load the default extensions
+ MacDefaultExtensionRecord defaults[1] =
+ {
+ MacDefaultExtensionRecord( "txt" , 'TEXT' , 'ttxt' ) ,
+
+ } ;
+ // we could load the pc exchange prefs here too
+
+ for ( size_t i = 0 ; i < WXSIZEOF( defaults ) ; ++i )
+ {
+ gMacDefaultExtensions.Add( defaults[i] ) ;
+ }
+ gMacDefaultExtensionsInited = true ;
+ }
+}
+bool wxFileName::MacSetTypeAndCreator( wxUint32 type , wxUint32 creator )
+{
+ FInfo fndrInfo ;
+ FSSpec spec ;
+ wxMacFilename2FSSpec(GetFullPath(),&spec) ;
+ OSErr err = FSpGetFInfo( &spec , &fndrInfo ) ;
+ wxCHECK( err == noErr , false ) ;
+
+ fndrInfo.fdType = type ;
+ fndrInfo.fdCreator = creator ;
+ FSpSetFInfo( &spec , &fndrInfo ) ;
+ return true ;
+}
+
+bool wxFileName::MacGetTypeAndCreator( wxUint32 *type , wxUint32 *creator )
+{
+ FInfo fndrInfo ;
+ FSSpec spec ;
+ wxMacFilename2FSSpec(GetFullPath(),&spec) ;
+ OSErr err = FSpGetFInfo( &spec , &fndrInfo ) ;
+ wxCHECK( err == noErr , false ) ;
+
+ *type = fndrInfo.fdType ;
+ *creator = fndrInfo.fdCreator ;
+ return true ;
+}
+
+bool wxFileName::MacSetDefaultTypeAndCreator()
+{
+ wxUint32 type , creator ;
+ if ( wxFileName::MacFindDefaultTypeAndCreator(GetExt() , &type ,
+ &creator ) )
+ {
+ return MacSetTypeAndCreator( type , creator ) ;
+ }
+ return false;
+}
+
+bool wxFileName::MacFindDefaultTypeAndCreator( const wxString& ext , wxUint32 *type , wxUint32 *creator )
+{
+ MacEnsureDefaultExtensionsLoaded() ;
+ wxString extl = ext.Lower() ;
+ for( int i = gMacDefaultExtensions.Count() - 1 ; i >= 0 ; --i )
+ {
+ if ( gMacDefaultExtensions.Item(i).m_ext == extl )
+ {
+ *type = gMacDefaultExtensions.Item(i).m_type ;
+ *creator = gMacDefaultExtensions.Item(i).m_creator ;
+ return true ;
+ }
+ }
+ return false ;
+}
+
+void wxFileName::MacRegisterDefaultTypeAndCreator( const wxString& ext , wxUint32 type , wxUint32 creator )
+{
+ MacEnsureDefaultExtensionsLoaded() ;
+ MacDefaultExtensionRecord rec ;
+ rec.m_type = type ;
+ rec.m_creator = creator ;
+ strncpy( rec.m_ext , ext.Lower().c_str() , kMacExtensionMaxLength ) ;
+ gMacDefaultExtensions.Add( rec ) ;
+}
+#endif