=head1 NAME Mac::Files - Macintosh Toolbox Interface to the File and Alias Manager =head1 DESCRIPTION =cut package Mac::Files; require DynaLoader; use strict; use base 'DynaLoader'; use base 'Exporter'; use vars qw(@EXPORT %EXPORT_TAGS $VERSION); $VERSION = '1.09'; @EXPORT = qw( FSpGetCatInfo FSpSetCatInfo FSMakeFSSpec FSpCreate FSpDirCreate FSpDelete FSpGetFInfo FSpSetFInfo FSpSetFLock FSpRstFLock FSpRename FSpCatMove FSpExchangeFiles NewAlias NewAliasRelative NewAliasMinimal NewAliasMinimalFromFullPath UpdateAlias UpdateAliasRelative ResolveAlias ResolveAliasRelative GetAliasInfo UnmountVol Eject FlushVol FindFolder ); %EXPORT_TAGS = ( functions => [ @EXPORT ], all => \@EXPORT ); sub constants { my @constants; seek DATA, 0, 0; # this reads the entire script my $data = do { local $/; }; while ($data =~ m|=item (\w+)\s+(?:([^\n]+)\n\s+)?=cut\s+sub \1 \(\) { (\S+) }|g) { my($symbol, $desc, $value ) = ($1, $2, $3); push @constants, $symbol; } push @EXPORT, @constants; $EXPORT_TAGS{constants} = \@constants; } constants(); bootstrap Mac::Files; =head2 Constants Constants for file access permissions. Use these constants to request a type of access to a file or fork, or to deny a type of access to a file or fork to other paths that may request access. Note that it is possible, on Mac OS 8 and 9, to open a file residing on read-only media with write access. On Mac OS X, however, you cannot open a file with write access on read-only media; the attempt to open the file fails with a wrPermErr error. =over 4 =item fsCurPerm Requests whatever permissions are currently allowed. If write access is unavailable (because the file is locked or the file is already open with write permission), then read permission is granted. Otherwise read/write permission is granted. =cut sub fsCurPerm () { 0x00 } =item fsRdPerm Requests permission to read the file. =cut sub fsRdPerm () { 0x01 } =item fsWrPerm Requests permission to write to the file. If write permission is granted, no other access paths are granted write permission. Note, however, that the File Manager does not support write-only access to a file. Thus, fsWrPerm is synonymous with fsRdWrPerm. =cut sub fsWrPerm () { 0x02 } =item fsRdWrPerm Requests exclusive read and write permission. If exclusive read/write permission is granted, no other users are granted permission to write to the file. Other users may, however, be granted permission to read the file. =cut sub fsRdWrPerm () { 0x03 } =item fsRdWrShPerm Requests shared read and write permission. Shared read/write permission allows mutliple access paths for reading and writing. This is safe only if there is some way of locking portions of the file before writing to them. Use the functions PBLockRangeSync and PBUnlockRangeSync to lock and unlock ranges of bytes within a file. On Mac OS 8 and 9, these functions are supported only on remotely mounted volumes, or on local volumes that are shareable on the network. You should check that range locking is available before requesting shared read/ write permission. On Mac OS X, range locking is available on all volumes. =cut sub fsRdWrShPerm () { 0x04 } =item fsRdDenyPerm Requests that any other paths be prevented from having read access. A path cannot be opened if you request read permission (with the fsRdPerm constant) but some other path has requested deny-read access. Similarly, the path cannot be opened if you request deny-read permission, but some other path already has read access. This constant is used with the PBHOpenDenySync and PBHOpenRFDenySync functions. =cut sub fsRdDenyPerm () { 0x10 } =item fsWrDenyPerm Requests that any other paths be prevented from having write access. A path cannot be opened if you request write permission (with the fsWrPerm constant) but some other path has requested deny-write access. Similarly, the path cannot be opened if you request deny-write permission, but some other path already has write access. This constant is used with the PBHOpenDenySync and PBHOpenRFDenySync functions. =cut sub fsWrDenyPerm () { 0x20 } =back ioFlAttrib bits, returned by FSpGetCatInfo. =over 4 =item kioFlAttribLocked Set if file or directory is locked =cut sub kioFlAttribLocked () { 0x01 } =item kioFlAttribResOpen Set if resource fork is open =cut sub kioFlAttribResOpen () { 0x04 } =item kioFlAttribDataOpen Set if data fork is open =cut sub kioFlAttribDataOpen () { 0x08 } =item kioFlAttribDir Set if this is a directory =cut sub kioFlAttribDir () { 0x10 } =item kioFlAttribCopyProt Set if AppleShare server "copy-protects" the file =cut sub kioFlAttribCopyProt () { 0x40 } =item kioFlAttribFileOpen Set if file (either fork) is open =cut sub kioFlAttribFileOpen () { 0x80 } =item kioFlAttribInShared Set if the directory is within a shared area of the directory hierarchy =cut sub kioFlAttribInShared () { 0x04 } =item kioFlAttribMounted Set if the directory is a share point that is mounted by some user =cut sub kioFlAttribMounted () { 0x08 } =item kioFlAttribSharePoint Set if the directory is a share point =cut sub kioFlAttribSharePoint () { 0x20 } =back Finder flags =over 4 =item kIsOnDesk Files and folders (System 6) =cut sub kIsOnDesk () { 0x0001 } =item kColor Files and folders; bit 0x0020 was kRequireSwitchLaunch, but is now reserved for future use =cut sub kColor () { 0x000E } =item kIsShared Files only (Applications only); if clear, the application needs to write to its resource fork, and therefore cannot be shared on a server =cut sub kIsShared () { 0x0040 } =item kHasNoINITs Files only (Extensions/Control Panels only); this file contains no INIT resource =cut sub kHasNoINITs () { 0x0080 } =item kHasBeenInited Files only; clear if the file contains desktop database; resources ('BNDL', 'FREF', 'open', 'kind'...) that have not been added yet. Set only by the Finder; reserved for folders - make sure this bit is cleared for folders; bit 0x0200 was the letter bit for AOCE, but is now reserved for future use =cut sub kHasBeenInited () { 0x0100 } =item kHasCustomIcon Files and folders =cut sub kHasCustomIcon () { 0x0400 } =item kIsStationery Files only =cut sub kIsStationery () { 0x0800 } =item kNameLocked Files and folders =cut sub kNameLocked () { 0x1000 } =item kHasBundle Files only =cut sub kHasBundle () { 0x2000 } =item kIsInvisible Files and folders =cut sub kIsInvisible () { 0x4000 } =item kIsAlias Files only =cut sub kIsAlias () { 0x8000 } =back AppleTalk/GetAliasInfo Constants =over 4 =item asiZoneName Return AppleTalk zone name from GetAliasInfo. =cut sub asiZoneName () { -3 } =item asiServerName Return AppleTalk server name from GetAliasInfo. =cut sub asiServerName () { -2 } =item asiVolumeName Return volume name from GetAliasInfo. =cut sub asiVolumeName () { -1 } =item asiAliasName Return last component of target file name from GetAliasInfo. =cut sub asiAliasName () { 0 } =item asiParentName Return name of enclosing folder from GetAliasInfo. This index value is 1. Higher indices will return folder names higher up the hierarchy. =cut sub asiParentName () { 1 } =back Folder type constants. Specify a type of folder on a particular volume. Use in vRefNum parameter of FindFolder(). =over 4 =item kOnSystemDisk previously was 0x8000 but that is an unsigned value whereas vRefNum is signed =cut sub kOnSystemDisk () { -32768 } =item kOnAppropriateDisk Generally, the same as kOnSystemDisk, but it's clearer that this isn't always the 'boot' disk. =cut sub kOnAppropriateDisk () { -32767 } =back Folder Domains - Carbon only. The constants above can continue to be used, but the folder/volume returned will be from one of the domains below. =over 4 =item kSystemDomain Read-only system hierarchy. =cut sub kSystemDomain () { -32766 } =item kLocalDomain All users of a single machine have access to these resources. =cut sub kLocalDomain () { -32765 } =item kNetworkDomain All users configured to use a common network server has access to these resources. =cut sub kNetworkDomain () { -32764 } =item kUserDomain Read/write. Resources that are private to the user. =cut sub kUserDomain () { -32763 } =item kClassicDomain Domain referring to the currently configured Classic System Folder =cut sub kClassicDomain () { -32762 } =item kLastDomainConstant The ID of the last domain in the above list, used by the Folder Manager to determine if a given parameter should be treated as a domain or a volume... =cut sub kLastDomainConstant () { kUserDomain } =back Constants for createFolder parameter of FindFolder(). =over 4 =item kCreateFolder =cut sub kCreateFolder () { 1 } =item kDontCreateFolder =cut sub kDontCreateFolder () { 0 } =back Folder Type Constants for FindFolder(). =over 4 =item kSystemFolderType the system folder =cut sub kSystemFolderType () { 'macs' } =item kDesktopFolderType the desktop folder; objects in this folder show on the desk top. =cut sub kDesktopFolderType () { 'desk' } =item kSystemDesktopFolderType the desktop folder at the root of the hard drive, never the redirected user desktop folder =cut sub kSystemDesktopFolderType () { 'sdsk' } =item kTrashFolderType the trash folder; objects in this folder show up in the trash =cut sub kTrashFolderType () { 'trsh' } =item kSystemTrashFolderType the trash folder at the root of the drive, never the redirected user trash folder =cut sub kSystemTrashFolderType () { 'strs' } =item kWhereToEmptyTrashFolderType the "empty trash" folder; Finder starts empty from here down =cut sub kWhereToEmptyTrashFolderType () { 'empt' } =item kPrintMonitorDocsFolderType Print Monitor documents =cut sub kPrintMonitorDocsFolderType () { 'prnt' } =item kStartupFolderType Finder objects (applications, documents, DAs, aliases, to...) to open at startup go here =cut sub kStartupFolderType () { 'strt' } =item kShutdownFolderType Finder objects (applications, documents, DAs, aliases, to...) to open at shutdown go here =cut sub kShutdownFolderType () { 'shdf' } =item kAppleMenuFolderType Finder objects to put into the Apple menu go here =cut sub kAppleMenuFolderType () { 'amnu' } =item kControlPanelFolderType Control Panels go here (may contain INITs) =cut sub kControlPanelFolderType () { 'ctrl' } =item kSystemControlPanelFolderType System control panels folder - never the redirected one, always "Control Panels" inside the System Folder =cut sub kSystemControlPanelFolderType () { 'sctl' } =item kExtensionFolderType System extensions go here =cut sub kExtensionFolderType () { 'extn' } =item kFontsFolderType Fonts go here =cut sub kFontsFolderType () { 'font' } =item kPreferencesFolderType preferences for applications go here =cut sub kPreferencesFolderType () { 'pref' } =item kSystemPreferencesFolderType System-type Preferences go here - this is always the system's preferences folder, never a logged in user's =cut sub kSystemPreferencesFolderType () { 'sprf' } =item kTemporaryFolderType temporary files go here (deleted periodically, but don't rely on it.) =cut sub kTemporaryFolderType () { 'temp' } =item kExtensionDisabledFolderType =cut sub kExtensionDisabledFolderType () { 'extD' } =item kControlPanelDisabledFolderType =cut sub kControlPanelDisabledFolderType () { 'ctrD' } =item kSystemExtensionDisabledFolderType =cut sub kSystemExtensionDisabledFolderType () { 'macD' } =item kStartupItemsDisabledFolderType =cut sub kStartupItemsDisabledFolderType () { 'strD' } =item kShutdownItemsDisabledFolderType =cut sub kShutdownItemsDisabledFolderType () { 'shdD' } =item kApplicationsFolderType =cut sub kApplicationsFolderType () { 'apps' } =item kDocumentsFolderType =cut sub kDocumentsFolderType () { 'docs' } =back New Constants =over 4 =item kVolumeRootFolderType root folder of a volume =cut sub kVolumeRootFolderType () { 'root' } =item kChewableItemsFolderType items deleted at boot =cut sub kChewableItemsFolderType () { 'flnt' } =item kApplicationSupportFolderType third-party items and folders =cut sub kApplicationSupportFolderType () { 'asup' } =item kTextEncodingsFolderType encoding tables =cut sub kTextEncodingsFolderType () { 'Ätex' } =item kStationeryFolderType stationery =cut sub kStationeryFolderType () { 'odst' } =item kOpenDocFolderType OpenDoc root =cut sub kOpenDocFolderType () { 'odod' } =item kOpenDocShellPlugInsFolderType OpenDoc Shell Plug-Ins in OpenDoc folder =cut sub kOpenDocShellPlugInsFolderType () { 'odsp' } =item kEditorsFolderType OpenDoc editors in Mac OS Folder =cut sub kEditorsFolderType () { 'oded' } =item kOpenDocEditorsFolderType OpenDoc subfolder of Editors folder =cut sub kOpenDocEditorsFolderType () { 'Äodf' } =item kOpenDocLibrariesFolderType OpenDoc libraries folder =cut sub kOpenDocLibrariesFolderType () { 'odlb' } =item kGenEditorsFolderType CKH general editors folder at root level of Sys folder =cut sub kGenEditorsFolderType () { 'Äedi' } =item kHelpFolderType CKH help folder currently at root of system folder =cut sub kHelpFolderType () { 'Ählp' } =item kInternetPlugInFolderType CKH internet plug ins for browsers and stuff =cut sub kInternetPlugInFolderType () { 'Änet' } =item kModemScriptsFolderType CKH modem scripts, get 'em OUT of the Extensions folder =cut sub kModemScriptsFolderType () { 'Ämod' } =item kPrinterDescriptionFolderType CKH new folder at root of System folder for printer descs. =cut sub kPrinterDescriptionFolderType () { 'ppdf' } =item kPrinterDriverFolderType CKH new folder at root of System folder for printer drivers =cut sub kPrinterDriverFolderType () { 'Äprd' } =item kScriptingAdditionsFolderType CKH at root of system folder =cut sub kScriptingAdditionsFolderType () { 'Äscr' } =item kSharedLibrariesFolderType CKH for general shared libs. =cut sub kSharedLibrariesFolderType () { 'Älib' } =item kVoicesFolderType CKH macintalk can live here =cut sub kVoicesFolderType () { 'fvoc' } =item kControlStripModulesFolderType CKH for control strip modules =cut sub kControlStripModulesFolderType () { 'sdev' } =item kAssistantsFolderType SJF for Assistants (Mac OS Setup Assistant, etc) =cut sub kAssistantsFolderType () { 'astÄ' } =item kUtilitiesFolderType SJF for Utilities folder =cut sub kUtilitiesFolderType () { 'utiÄ' } =item kAppleExtrasFolderType SJF for Apple Extras folder =cut sub kAppleExtrasFolderType () { 'aexÄ' } =item kContextualMenuItemsFolderType SJF for Contextual Menu items =cut sub kContextualMenuItemsFolderType () { 'cmnu' } =item kMacOSReadMesFolderType SJF for Mac OS ReadMes folder =cut sub kMacOSReadMesFolderType () { 'morÄ' } =item kALMModulesFolderType EAS for Location Manager Module files except type 'thng' (within kExtensionFolderType) =cut sub kALMModulesFolderType () { 'walk' } =item kALMPreferencesFolderType EAS for Location Manager Preferences (within kPreferencesFolderType; contains kALMLocationsFolderType) =cut sub kALMPreferencesFolderType () { 'trip' } =item kALMLocationsFolderType EAS for Location Manager Locations (within kALMPreferencesFolderType) =cut sub kALMLocationsFolderType () { 'fall' } =item kColorSyncProfilesFolderType for ColorSyncª Profiles =cut sub kColorSyncProfilesFolderType () { 'prof' } =item kThemesFolderType for Theme data files =cut sub kThemesFolderType () { 'thme' } =item kFavoritesFolderType Favorties folder for Navigation Services =cut sub kFavoritesFolderType () { 'favs' } =item kInternetFolderType Internet folder (root level of startup volume) =cut sub kInternetFolderType () { 'intÄ' } =item kAppearanceFolderType Appearance folder (root of system folder) =cut sub kAppearanceFolderType () { 'appr' } =item kSoundSetsFolderType Sound Sets folder (in Appearance folder) =cut sub kSoundSetsFolderType () { 'snds' } =item kDesktopPicturesFolderType Desktop Pictures folder (in Appearance folder) =cut sub kDesktopPicturesFolderType () { 'dtpÄ' } =item kInternetSearchSitesFolderType Internet Search Sites folder =cut sub kInternetSearchSitesFolderType () { 'issf' } =item kFindSupportFolderType Find support folder =cut sub kFindSupportFolderType () { 'fnds' } =item kFindByContentFolderType Find by content folder =cut sub kFindByContentFolderType () { 'fbcf' } =item kInstallerLogsFolderType Installer Logs folder =cut sub kInstallerLogsFolderType () { 'ilgf' } =item kScriptsFolderType Scripts folder =cut sub kScriptsFolderType () { 'scrÄ' } =item kFolderActionsFolderType Folder Actions Scripts folder =cut sub kFolderActionsFolderType () { 'fasf' } =item kLauncherItemsFolderType Launcher Items folder =cut sub kLauncherItemsFolderType () { 'laun' } =item kRecentApplicationsFolderType Recent Applications folder =cut sub kRecentApplicationsFolderType () { 'rapp' } =item kRecentDocumentsFolderType Recent Documents folder =cut sub kRecentDocumentsFolderType () { 'rdoc' } =item kRecentServersFolderType Recent Servers folder =cut sub kRecentServersFolderType () { 'rsvr' } =item kSpeakableItemsFolderType Speakable Items folder =cut sub kSpeakableItemsFolderType () { 'spki' } =item kKeychainFolderType Keychain folder =cut sub kKeychainFolderType () { 'kchn' } =item kQuickTimeExtensionsFolderType QuickTime Extensions Folder (in Extensions folder) =cut sub kQuickTimeExtensionsFolderType () { 'qtex' } =item kDisplayExtensionsFolderType Display Extensions Folder (in Extensions folder) =cut sub kDisplayExtensionsFolderType () { 'dspl' } =item kMultiprocessingFolderType Multiprocessing Folder (in Extensions folder) =cut sub kMultiprocessingFolderType () { 'mpxf' } =item kPrintingPlugInsFolderType Printing Plug-Ins Folder (in Extensions folder) =cut sub kPrintingPlugInsFolderType () { 'pplg' } =back New Folder Types to accommodate the Mac OS X Folder Manager These folder types are not applicable on Mac OS 9. =over 4 =item kDomainTopLevelFolderType The top-level of a Folder domain, e.g. "/System" =cut sub kDomainTopLevelFolderType () { 'dtop' } =item kDomainLibraryFolderType the Library subfolder of a particular domain =cut sub kDomainLibraryFolderType () { 'dlib' } =item kColorSyncFolderType Contains ColorSync-related folders =cut sub kColorSyncFolderType () { 'sync' } =item kColorSyncCMMFolderType ColorSync CMMs =cut sub kColorSyncCMMFolderType () { 'ccmm' } =item kColorSyncScriptingFolderType ColorSync Scripting support =cut sub kColorSyncScriptingFolderType () { 'cscr' } =item kPrintersFolderType Contains Printing-related folders =cut sub kPrintersFolderType () { 'impr' } =item kSpeechFolderType Contains Speech-related folders =cut sub kSpeechFolderType () { 'spch' } =item kCarbonLibraryFolderType Contains Carbon-specific file =cut sub kCarbonLibraryFolderType () { 'carb' } =item kDocumentationFolderType Contains Documentation files (not user documents) =cut sub kDocumentationFolderType () { 'info' } =item kDeveloperDocsFolderType Contains Developer Documentation files and folders =cut sub kDeveloperDocsFolderType () { 'ddoc' } =item kDeveloperHelpFolderType Contains Developer Help related files =cut sub kDeveloperHelpFolderType () { 'devh' } =item kISSDownloadsFolderType Contains Internet Search Sites downloaded from the Internet =cut sub kISSDownloadsFolderType () { 'issd' } =item kUserSpecificTmpFolderType Contains temporary items created on behalf of the current user =cut sub kUserSpecificTmpFolderType () { 'utmp' } =item kCachedDataFolderType Contains various cache files for different clients =cut sub kCachedDataFolderType () { 'cach' } =item kFrameworksFolderType Contains Mac OS X Framework folders =cut sub kFrameworksFolderType () { 'fram' } =item kPrivateFrameworksFolderType Contains Mac OS X Private Framework folders =cut sub kPrivateFrameworksFolderType () { 'pfrm' } =item kClassicDesktopFolderType Mac OS 9 compatible desktop folder - same as kSystemDesktopFolderType but with a more appropriate name for Mac OS X code. =cut sub kClassicDesktopFolderType () { 'sdsk' } =item kDeveloperFolderType Contains Mac OS X Developer Resources =cut sub kDeveloperFolderType () { 'devf' } =item kSystemSoundsFolderType Contains Mac OS X System Sound Files =cut sub kSystemSoundsFolderType () { 'ssnd' } =item kComponentsFolderType Contains Mac OS X components =cut sub kComponentsFolderType () { 'cmpd' } =item kQuickTimeComponentsFolderType Contains QuickTime components for Mac OS X =cut sub kQuickTimeComponentsFolderType () { 'wcmp' } =item kCoreServicesFolderType Refers to the "CoreServices" folder on Mac OS X =cut sub kCoreServicesFolderType () { 'csrv' } =item kPictureDocumentsFolderType Refers to the "Pictures" folder in a users home directory =cut sub kPictureDocumentsFolderType () { 'pdoc' } =item kMovieDocumentsFolderType Refers to the "Movies" folder in a users home directory =cut sub kMovieDocumentsFolderType () { 'mdoc' } =item kMusicDocumentsFolderType Refers to the "Music" folder in a users home directory =cut sub kMusicDocumentsFolderType () { 'µdoc' } =item kInternetSitesFolderType Refers to the "Sites" folder in a users home directory =cut sub kInternetSitesFolderType () { 'site' } =item kPublicFolderType Refers to the "Public" folder in a users home directory =cut sub kPublicFolderType () { 'pubb' } =item kAudioSupportFolderType Refers to the Audio support folder for Mac OS X =cut sub kAudioSupportFolderType () { 'adio' } =item kAudioSoundsFolderType Refers to the Sounds subfolder of Audio Support =cut sub kAudioSoundsFolderType () { 'asnd' } =item kAudioSoundBanksFolderType Refers to the Banks subfolder of the Sounds Folder =cut sub kAudioSoundBanksFolderType () { 'bank' } =item kAudioAlertSoundsFolderType Refers to the Alert Sounds subfolder of the Sound Folder =cut sub kAudioAlertSoundsFolderType () { 'alrt' } =item kAudioPlugInsFolderType Refers to the Plug-ins subfolder of the Audio Folder =cut sub kAudioPlugInsFolderType () { 'aplg' } =item kAudioComponentsFolderType Refers to the Components subfolder of the Audio Plug-ins Folder =cut sub kAudioComponentsFolderType () { 'acmp' } =item kKernelExtensionsFolderType Refers to the Kernel Extensions Folder on Mac OS X =cut sub kKernelExtensionsFolderType () { 'kext' } =item kDirectoryServicesFolderType Refers to the Directory Services folder on Mac OS X =cut sub kDirectoryServicesFolderType () { 'dsrv' } =item kDirectoryServicesPlugInsFolderType Refers to the Directory Services Plug-Ins folder on Mac OS X =cut sub kDirectoryServicesPlugInsFolderType () { 'dplg' } =item kInstallerReceiptsFolderType Refers to the "Receipts" folder in Mac OS X =cut sub kInstallerReceiptsFolderType () { 'rcpt' } =item kFileSystemSupportFolderType Refers to the [domain]/Library/Filesystems folder in Mac OS X =cut sub kFileSystemSupportFolderType () { 'fsys' } =item kAppleShareSupportFolderType Refers to the [domain]/Library/Filesystems/AppleShare folder in Mac OS X =cut sub kAppleShareSupportFolderType () { 'shar' } =item kAppleShareAuthenticationFolderType Refers to the [domain]/Library/Filesystems/AppleShare/Authentication folder in Mac OS X =cut sub kAppleShareAuthenticationFolderType () { 'auth' } =item kMIDIDriversFolderType Refers to the MIDI Drivers folder on Mac OS X =cut sub kMIDIDriversFolderType () { 'midi' } =item kKeyboardLayoutsFolderType Refers to the [domain]/Library/KeyboardLayouts folder in Mac OS X =cut sub kKeyboardLayoutsFolderType () { 'klay' } =item kIndexFilesFolderType Refers to the [domain]/Library/Indexes folder in Mac OS X =cut sub kIndexFilesFolderType () { 'indx' } =item kFindByContentIndexesFolderType Refers to the [domain]/Library/Indexes/FindByContent folder in Mac OS X =cut sub kFindByContentIndexesFolderType () { 'fbcx' } =item kManagedItemsFolderType Refers to the Managed Items folder for Mac OS X =cut sub kManagedItemsFolderType () { 'mang' } =item kBootTimeStartupItemsFolderType Refers to the "StartupItems" folder of Mac OS X =cut sub kBootTimeStartupItemsFolderType () { 'empz' } =back More Folder Constants =over 4 =item kLocalesFolderType PKE for Locales folder =cut sub kLocalesFolderType () { 'Äloc' } =item kFindByContentPluginsFolderType Find By Content Plug-ins =cut sub kFindByContentPluginsFolderType () { 'fbcp' } =item kUsersFolderType "Users" folder, contains one folder for each user. =cut sub kUsersFolderType () { 'usrs' } =item kCurrentUserFolderType The folder for the currently logged on user. =cut sub kCurrentUserFolderType () { 'cusr' } =item kCurrentUserRemoteFolderLocation The remote folder for the currently logged on user =cut sub kCurrentUserRemoteFolderLocation () { 'rusf' } =item kCurrentUserRemoteFolderType The remote folder location for the currently logged on user =cut sub kCurrentUserRemoteFolderType () { 'rusr' } =item kSharedUserDataFolderType A Shared "Documents" folder, readable & writeable by all users =cut sub kSharedUserDataFolderType () { 'sdat' } =item kVolumeSettingsFolderType Volume specific user information goes here =cut sub kVolumeSettingsFolderType () { 'vsfd' } =item kAppleshareAutomountServerAliasesFolderType Appleshare puts volumes to automount inside this folder. =cut sub kAppleshareAutomountServerAliasesFolderType () { 'srvÄ' } =item kPreMacOS91ApplicationsFolderType The "Applications" folder, pre Mac OS 9.1 =cut sub kPreMacOS91ApplicationsFolderType () { 'Œpps' } =item kPreMacOS91InstallerLogsFolderType The "Installer Logs" folder, pre Mac OS 9.1 =cut sub kPreMacOS91InstallerLogsFolderType () { '”lgf' } =item kPreMacOS91AssistantsFolderType The "Assistants" folder, pre Mac OS 9.1 =cut sub kPreMacOS91AssistantsFolderType () { 'ŒstÄ' } =item kPreMacOS91UtilitiesFolderType The "Utilities" folder, pre Mac OS 9.1 =cut sub kPreMacOS91UtilitiesFolderType () { 'ŸtiÄ' } =item kPreMacOS91AppleExtrasFolderType The "Apple Extras" folder, pre Mac OS 9.1 =cut sub kPreMacOS91AppleExtrasFolderType () { 'ŒexÄ' } =item kPreMacOS91MacOSReadMesFolderType The "Mac OS ReadMes" folder, pre Mac OS 9.1 =cut sub kPreMacOS91MacOSReadMesFolderType () { 'µorÄ' } =item kPreMacOS91InternetFolderType The "Internet" folder, pre Mac OS 9.1 =cut sub kPreMacOS91InternetFolderType () { '”ntÄ' } =item kPreMacOS91AutomountedServersFolderType The "Servers" folder, pre Mac OS 9.1 =cut sub kPreMacOS91AutomountedServersFolderType () { '§rvÄ' } =item kPreMacOS91StationeryFolderType The "Stationery" folder, pre Mac OS 9.1 =cut sub kPreMacOS91StationeryFolderType () { '¿dst' } =back =cut # # Translate volume name or number # sub _VolumeID { my ($id) = @_; my ($name, $vRef); if ($id =~ /^[^:]+:$/) { ($name, $vRef) = ($id, 0); } else { ($name, $vRef) = ("", $id); } return ($name, $vRef); } sub UnmountVol { _UnmountVol(&_VolumeID); } sub Eject { _Eject (&_VolumeID); } sub FlushVol { _FlushVol (&_VolumeID); } # we try to convert the path to an HFS-style path because # NewAliasMinimalFromFullPath only works with HFS-style paths # ... or in the future we could try FSNewAliasMinmalUnicode, # but that will only work if the directory underneath works ... # plus we need to convert to Unicode ... bleah if ($^O ne 'MacOS') { *NAMFFP = *NewAliasMinimalFromFullPath{CODE}; no strict 'refs'; no warnings 'redefine'; *NewAliasMinimalFromFullPath = sub { NAMFFP(_Unix2Mac($_[0])); } } sub _Unix2Mac { require MacPerl; my($path) = @_; # normalize # for this reason, either file, or path to file, must exist already my $path2 = MacPerl::MakeFSSpec($path); $path = MacPerl::MakePath($path2); # is this a relative url? if (substr($path, 0, 1) ne '/') { $path =~ tr|/:|:/|; $path = ':' . $path; } # is this an absolute url with another Volume? elsif ($path =~ m|^/Volumes/([^/]+)(/.*)|) { my $volume = $1; my $rest = $2; $rest =~ tr|/:|:/|; $path = $volume . $rest; } # absolute path off of startup volume elsif (substr($path, 0, 1) eq '/') { (my $volume = scalar MacPerl::Volumes()) =~ s/^.+?:(.+)$/$1/; $path =~ tr|/:|:/|; $path = $volume . $path; } return $path; } =include Files.xs =head1 AUTHOR Written by Matthias Ulrich Neeracher Eneeracher@mac.comE. Currently maintained by Chris Nandor Epudge@pobox.comE. =cut 1; __DATA__