/* ** Shared library initialization code. ** ** This code calls the MetroWerks shared-library initialization code ** and performs one extra step: it remembers the FSSpec of the file ** we are loaded from, so we can later call PyMac_AddLibResources to ** add the file to our resource file chain. ** ** This file is needed for PythonCore and for any dynamically loaded ** module that has interesting resources in its .slb file. ** Use by replacing __initialize in the "CFM preferences" init field ** by __initialize_with_resources. */ #include #include #include #include #include /* ** Variables passed from shared lib initialization to PyMac_AddLibResources. */ static int library_fss_valid; static FSSpec library_fss; /* ** Routine called upon fragment load. We attempt to save the FSSpec from which we're ** loaded. We always return noErr (we just continue without the resources). */ OSErr pascal __initialize_with_resources(InitBlockPtr data) { /* Call the MW runtime's initialization routine */ /* #ifdef __CFM68K__ */ #if 1 __initialize(); #else __sinit(); #endif if ( data == nil ) return noErr; if ( data->fragLocator.where == kOnDiskFlat ) { library_fss = *data->fragLocator.u.onDisk.fileSpec; library_fss_valid = 1; } else if ( data->fragLocator.where == kOnDiskSegmented ) { library_fss = *data->fragLocator.u.inSegs.fileSpec; library_fss_valid = 1; } return noErr; } /* ** Insert the library resources into the search path. Put them after ** the resources from the application (which we assume is the current ** resource file). Again, we ignore errors. */ void PyMac_AddLibResources() { if ( !library_fss_valid ) return; (void)FSpOpenResFile(&library_fss, fsRdPerm); }