RbBFBlokProjw#Ɯ=PSIVStrn5.5OPSpStrnPOSIXExtensions.rbACnmStrnAChpStrnACsvStrnlocalhost:7325Ver1Strn1Ver2Strn0Ver3Strn0RelsStrn0NnRlStrn0RegnStrn0SVerStrnLVerStrnIVerStrnDVewInt NvxprTpInt DLanInt CLanInt DEncInt BflgInt BCXFInt IconGrupEndGInt CPalGrupflagInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt EndGInt MacCStrn????BMacStrnMy ApplicationBCarStrnMy Application (Mac OS X)BSizInt @BMSzInt BSzSStrn4096BMSSStrn2048MDIcStrnMy ApplicationBWinStrnMy Application.exeBMDIInt BL86Strn MyApplicationrEdtRect2fTypGrupLnameStrntextMacCStrnR*chtypeStrnTEXTdefnStrnflagInt EndGInt PadnPadn(****************************************BlokpVewNvx@ !TNameStrnWindow1ContInt rEdtRect69eSptInt bPGpGrupPbPElGrup4scKyInt rEdtRect69eSptInt EndGInt EndGInt lstHInt lstVInt PDefGrup4nameStrnNamePValStrnWindow1EncoInt EndGInt PDefGrup(nameStrnFramePValStrn0EndGInt PDefGrup0nameStrn CompositePValStrnFalseEndGInt PDefGrup0nameStrn HasBackColorPValStrnFalseEndGInt PDefGrup0nameStrn BackColorPValStrn16777215EndGInt PDefGrup(nameStrnBackdropPValStrn0EndGInt PDefGrupDnameStrnTitlePValStrnPOSIX<->FolderItemEncoInt EndGInt PDefGrup(nameStrnVisiblePValStrnTrueEndGInt PDefGrup0nameStrn FullScreenPValStrnFalseEndGInt PDefGrup0nameStrnMenuBarVisiblePValStrnTrueEndGInt PDefGrup,nameStrnCloseBoxPValStrnFalseEndGInt PDefGrup,nameStrnGrowIconPValStrnFalseEndGInt PDefGrup0nameStrn LiveResizePValStrnFalseEndGInt PDefGrup,nameStrnZoomIconPValStrnFalseEndGInt PDefGrup(nameStrn BalloonHelpPValStrnEndGInt PDefGrup,nameStrn MacProcIDPValStrn0EndGInt PDefGrup0nameStrnMenuBarPValStrn -1135708553EndGInt PDefGrup,nameStrn PlacementPValStrn2EndGInt PDefGrup(nameStrnWidthPValStrn481EndGInt PDefGrup(nameStrnHeightPValStrn148EndGInt PDefGrup(nameStrnMinWidthPValStrn64EndGInt PDefGrup,nameStrn MinHeightPValStrn64EndGInt PDefGrup,nameStrnMaxWidthPValStrn32000EndGInt PDefGrup0nameStrn MaxHeightPValStrn32000EndGInt FDefGrup(NameStrnWindow1SizeInt SuprStrnWindowbNtrInt PropGrupEncoInt declStrnpFold As FolderItemflagInt sorcGrupxstsrInt stscInt ndsrInt ndscInt EncoInt ntlnStrnpFold As FolderItemntlnStrnntlnStrnEndGInt EndGInt MethGrupEncoInt nameStrn ChooseFileparmStrnf As FolderItemrsltStrnflagInt sorcGrup,stsrInt stscInt ndsrInt ndscInt EncoInt srclStrnSub ChooseFile(f As FolderItem)srclStrn pFold = fsrclStrnIf f <> nil ThensrclStrn EditField2.Text = f.AbsolutePathsrclStrnElsesrclStrnEditField2.Text = "(null)"srclStrnEnd IfsrclStrnEnd SubEndGInt EndGInt HInsGrup0EncoInt nameStrnOpensorcGrupstsrInt stscInt IndsrInt ndscInt IEncoInt srclStrn Sub Open()srclStrn%EditField1.Text = "/Users/kevin/Dev/"srclStrnIChooseFile DocumentsFolder.Parent.Child("Pictures").Child("DSC00513.jpg")srclStrnEnd SubEndGInt EndGInt EndGInt CBhvGrup@NameStrnSizeInt SuprStrn EditFieldbNtrInt EndGInt CBhvGrup4NameStrnSizeInt SuprStrn PushButtonbNtrInt HInsGrupEncoInt nameStrnActionsorcGrupstsrInt stscInt %ndsrInt ndscInt %EncoInt srclStrn Sub Action()srclStrn%ChooseFile Editfield1.Text.FolderItemsrclStrnEnd SubEndGInt EndGInt EndGInt CBhvGrup@NameStrnSizeInt SuprStrn EditFieldbNtrInt EndGInt CBhvGrupNameStrnSizeInt SuprStrn PushButtonbNtrInt HInsGrupxEncoInt nameStrnActionsorcGrup<stsrInt stscInt ndsrInt ndscInt EncoInt srclStrn Sub Action()srclStrnDim od As OpenDialogsrclStrnDim f As FolderItemsrclStrnod = New OpenDialogsrclStrnf = od.ShowModalWithin(self)srclStrnIf f <> nil ThensrclStrn ChooseFile fsrclStrnEnd IfsrclStrnEnd SubEndGInt EndGInt EndGInt CBhvGrupNameStrnSizeInt SuprStrn PushButtonbNtrInt HInsGrupDEncoInt nameStrnActionsorcGrupstsrInt stscInt ndsrInt ndscInt EncoInt srclStrn Sub Action()srclStrnIf pFold <> nil ThensrclStrn!EditField1.Text = pFold.POSIXPathsrclStrnElsesrclStrnEditField1.Text = "(null)"srclStrnEnd IfsrclStrnEnd SubEndGInt EndGInt EndGInt CtrlGrup \ cclsStrn EditFieldnameStrn EditFieldPDefGrup8 nameStrnNamePValStrn EditField1EncoInt EndGInt  PDefGrup0 nameStrnIndexPValStrn -2147483648EndGInt  PDefGrup0 nameStrn TabPanelIndexPValStrn0EndGInt  PDefGrup( nameStrnVisiblePValStrnTrueEndGInt  PDefGrup$nameStrnLeftPValStrn20EndGInt PDefGrup$nameStrnTopPValStrn14EndGInt PDefGrup(nameStrnWidthPValStrn441EndGInt PDefGrup(nameStrnHeightPValStrn22EndGInt PDefGrup,nameStrn InitialParentPValStrnEndGInt PDefGrup$nameStrnHelpTagPValStrnEndGInt PDefGrup(nameStrn BalloonHelpPValStrnEndGInt PDefGrup0nameStrnDisabledBalloonHelpPValStrnEndGInt PDefGrup0nameStrnAutoDeactivatePValStrnTrueEndGInt PDefGrup,nameStrnLockLeftPValStrnFalseEndGInt PDefGrup,nameStrnLockTopPValStrnFalseEndGInt PDefGrup0nameStrn LockRightPValStrnFalseEndGInt PDefGrup0nameStrn LockBottomPValStrnFalseEndGInt PDefGrup8nameStrnTextFontPValStrnSystemEncoInt EndGInt PDefGrup(nameStrnTextSizePValStrn12EndGInt PDefGrup(nameStrnBoldPValStrnFalseEndGInt PDefGrup,nameStrnItalicPValStrnFalseEndGInt PDefGrup0nameStrn UnderlinePValStrnFalseEndGInt PDefGrup( nameStrnBorderPValStrnTrueEndGInt  PDefGrup0!nameStrn MultiLinePValStrnFalseEndGInt !PDefGrup8"nameStrnScrollBarHorizontalPValStrnFalseEndGInt "PDefGrup,#nameStrn ScrollBarPValStrnTrueEndGInt #PDefGrup4$nameStrnScrollBarVerticalPValStrnTrueEndGInt $PDefGrup,%nameStrnStyledPValStrnFalseEndGInt %PDefGrup,&nameStrnPasswordPValStrnFalseEndGInt &PDefGrup,'nameStrn UseFocusRingPValStrnTrueEndGInt 'PDefGrup,(nameStrnReadOnlyPValStrnFalseEndGInt (PDefGrup,)nameStrn LimitTextPValStrn0EndGInt )PDefGrup0*nameStrn AcceptTabsPValStrnFalseEndGInt *PDefGrup,+nameStrn AlignmentPValStrn0EndGInt +PDefGrup,,nameStrn TextColorPValStrn0EndGInt ,PDefGrup0-nameStrn BackColorPValStrn16777215EndGInt -PDefGrup(.nameStrnEnabledPValStrnTrueEndGInt .PDefGrup /nameStrnTextPValStrnEndGInt /PDefGrup(0nameStrn DataSourcePValStrnEndGInt 0PDefGrup(1nameStrn DataFieldPValStrnEndGInt 1PDefGrup$2nameStrnFormatPValStrnEndGInt 2PDefGrup 3nameStrnMaskPValStrnEndGInt 3CBixInt EndGInt  CtrlGrup44cclsStrn PushButtonnameStrn PushButtonPDefGrup85nameStrnNamePValStrn PushButton1EncoInt EndGInt 5PDefGrup06nameStrnIndexPValStrn -2147483648EndGInt 6PDefGrup07nameStrn TabPanelIndexPValStrn0EndGInt 7PDefGrup(8nameStrnVisiblePValStrnTrueEndGInt 8PDefGrup$9nameStrnLeftPValStrn206EndGInt 9PDefGrup$:nameStrnTopPValStrn48EndGInt :PDefGrup(;nameStrnWidthPValStrn69EndGInt ;PDefGrup(nameStrnHelpTagPValStrnEndGInt >PDefGrup(?nameStrn BalloonHelpPValStrnEndGInt ?PDefGrup0@nameStrnDisabledBalloonHelpPValStrnEndGInt @PDefGrup0AnameStrnAutoDeactivatePValStrnTrueEndGInt APDefGrup,BnameStrnLockLeftPValStrnFalseEndGInt BPDefGrup,CnameStrnLockTopPValStrnFalseEndGInt CPDefGrup0DnameStrn LockRightPValStrnFalseEndGInt DPDefGrup0EnameStrn LockBottomPValStrnFalseEndGInt EPDefGrup8FnameStrnTextFontPValStrnSystemEncoInt EndGInt FPDefGrup(GnameStrnTextSizePValStrn12EndGInt GPDefGrup(HnameStrnBoldPValStrnFalseEndGInt HPDefGrup,InameStrnItalicPValStrnFalseEndGInt IPDefGrup0JnameStrn UnderlinePValStrnFalseEndGInt JPDefGrup8KnameStrnCaptionPValStrnConvertEncoInt EndGInt KPDefGrup,LnameStrnDefaultPValStrnFalseEndGInt LPDefGrup,MnameStrnCancelPValStrnFalseEndGInt MPDefGrup(NnameStrnEnabledPValStrnTrueEndGInt NCBixInt EndGInt 4CtrlGrup XOcclsStrn EditFieldnameStrn EditFieldPDefGrup8PnameStrnNamePValStrn EditField2EncoInt EndGInt PPDefGrup0QnameStrnIndexPValStrn -2147483648EndGInt QPDefGrup0RnameStrn TabPanelIndexPValStrn0EndGInt RPDefGrup(SnameStrnVisiblePValStrnTrueEndGInt SPDefGrup$TnameStrnLeftPValStrn20EndGInt TPDefGrup$UnameStrnTopPValStrn80EndGInt UPDefGrup(VnameStrnWidthPValStrn360EndGInt VPDefGrup(WnameStrnHeightPValStrn22EndGInt WPDefGrup,XnameStrn InitialParentPValStrnEndGInt XPDefGrup$YnameStrnHelpTagPValStrnEndGInt YPDefGrup(ZnameStrn BalloonHelpPValStrnEndGInt ZPDefGrup0[nameStrnDisabledBalloonHelpPValStrnEndGInt [PDefGrup0\nameStrnAutoDeactivatePValStrnTrueEndGInt \PDefGrup,]nameStrnLockLeftPValStrnFalseEndGInt ]PDefGrup,^nameStrnLockTopPValStrnFalseEndGInt ^PDefGrup0_nameStrn LockRightPValStrnFalseEndGInt _PDefGrup0`nameStrn LockBottomPValStrnFalseEndGInt `PDefGrup8anameStrnTextFontPValStrnSystemEncoInt EndGInt aPDefGrup(bnameStrnTextSizePValStrn12EndGInt bPDefGrup(cnameStrnBoldPValStrnFalseEndGInt cPDefGrup,dnameStrnItalicPValStrnFalseEndGInt dPDefGrup0enameStrn UnderlinePValStrnFalseEndGInt ePDefGrup(fnameStrnBorderPValStrnTrueEndGInt fPDefGrup0gnameStrn MultiLinePValStrnFalseEndGInt gPDefGrup8hnameStrnScrollBarHorizontalPValStrnFalseEndGInt hPDefGrup,inameStrn ScrollBarPValStrnTrueEndGInt iPDefGrup4jnameStrnScrollBarVerticalPValStrnTrueEndGInt jPDefGrup,knameStrnStyledPValStrnFalseEndGInt kPDefGrup,lnameStrnPasswordPValStrnFalseEndGInt lPDefGrup,mnameStrn UseFocusRingPValStrnTrueEndGInt mPDefGrup(nnameStrnReadOnlyPValStrnTrueEndGInt nPDefGrup,onameStrn LimitTextPValStrn0EndGInt oPDefGrup0pnameStrn AcceptTabsPValStrnFalseEndGInt pPDefGrup,qnameStrn AlignmentPValStrn0EndGInt qPDefGrup,rnameStrn TextColorPValStrn0EndGInt rPDefGrup0snameStrn BackColorPValStrn16777215EndGInt sPDefGrup(tnameStrnEnabledPValStrnTrueEndGInt tPDefGrup unameStrnTextPValStrnEndGInt uPDefGrup(vnameStrn DataSourcePValStrnEndGInt vPDefGrup(wnameStrn DataFieldPValStrnEndGInt wPDefGrup$xnameStrnFormatPValStrnEndGInt xPDefGrup ynameStrnMaskPValStrnEndGInt yCBixInt EndGInt OCtrlGrup4zcclsStrn PushButtonnameStrn PushButtonPDefGrup8{nameStrnNamePValStrn PushButton2EncoInt EndGInt {PDefGrup0|nameStrnIndexPValStrn -2147483648EndGInt |PDefGrup0}nameStrn TabPanelIndexPValStrn0EndGInt }PDefGrup(~nameStrnVisiblePValStrnTrueEndGInt ~PDefGrup$nameStrnLeftPValStrn392EndGInt PDefGrup$nameStrnTopPValStrn81EndGInt PDefGrup(nameStrnWidthPValStrn69EndGInt PDefGrup(nameStrnHeightPValStrn20EndGInt PDefGrup,nameStrn InitialParentPValStrnEndGInt PDefGrup$nameStrnHelpTagPValStrnEndGInt PDefGrup(nameStrn BalloonHelpPValStrnEndGInt PDefGrup0nameStrnDisabledBalloonHelpPValStrnEndGInt PDefGrup0nameStrnAutoDeactivatePValStrnTrueEndGInt PDefGrup,nameStrnLockLeftPValStrnFalseEndGInt PDefGrup,nameStrnLockTopPValStrnFalseEndGInt PDefGrup0nameStrn LockRightPValStrnFalseEndGInt PDefGrup0nameStrn LockBottomPValStrnFalseEndGInt PDefGrup8nameStrnTextFontPValStrnSystemEncoInt EndGInt PDefGrup(nameStrnTextSizePValStrn12EndGInt PDefGrup(nameStrnBoldPValStrnFalseEndGInt PDefGrup,nameStrnItalicPValStrnFalseEndGInt PDefGrup0nameStrn UnderlinePValStrnFalseEndGInt PDefGrup8nameStrnCaptionPValStrnChooseEncoInt EndGInt PDefGrup,nameStrnDefaultPValStrnFalseEndGInt PDefGrup,nameStrnCancelPValStrnFalseEndGInt PDefGrup(nameStrnEnabledPValStrnTrueEndGInt CBixInt EndGInt zCtrlGrup4cclsStrn PushButtonnameStrn PushButtonPDefGrup8nameStrnNamePValStrn PushButton3EncoInt EndGInt PDefGrup0nameStrnIndexPValStrn -2147483648EndGInt PDefGrup0nameStrn TabPanelIndexPValStrn0EndGInt PDefGrup(nameStrnVisiblePValStrnTrueEndGInt PDefGrup$nameStrnLeftPValStrn206EndGInt PDefGrup$nameStrnTopPValStrn114EndGInt PDefGrup(nameStrnWidthPValStrn69EndGInt PDefGrup(nameStrnHeightPValStrn20EndGInt PDefGrup,nameStrn InitialParentPValStrnEndGInt PDefGrup$nameStrnHelpTagPValStrnEndGInt PDefGrup(nameStrn BalloonHelpPValStrnEndGInt PDefGrup0nameStrnDisabledBalloonHelpPValStrnEndGInt PDefGrup0nameStrnAutoDeactivatePValStrnTrueEndGInt PDefGrup,nameStrnLockLeftPValStrnFalseEndGInt PDefGrup,nameStrnLockTopPValStrnFalseEndGInt PDefGrup0nameStrn LockRightPValStrnFalseEndGInt PDefGrup0nameStrn LockBottomPValStrnFalseEndGInt PDefGrup8nameStrnTextFontPValStrnSystemEncoInt EndGInt PDefGrup(nameStrnTextSizePValStrn12EndGInt PDefGrup(nameStrnBoldPValStrnFalseEndGInt PDefGrup,nameStrnItalicPValStrnFalseEndGInt PDefGrup0nameStrn UnderlinePValStrnFalseEndGInt PDefGrup8nameStrnCaptionPValStrnConvertEncoInt EndGInt PDefGrup,nameStrnDefaultPValStrnFalseEndGInt PDefGrup,nameStrnCancelPValStrnFalseEndGInt PDefGrup(nameStrnEnabledPValStrnTrueEndGInt CBixInt EndGInt PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpMnuNvwYNameStrnMenuBar1ContInt rEdtRectdd,MItmGrupspmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt MItmGrupspmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt EndGInt MItmGrupspmuInt nameStrnFileMenutextStrn&FileindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt MItmGrupspmuInt nameStrnFileQuittextStrnQuitindxInt scutStrnQbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrn QuitMenuItembNtrInt EndGInt MItmGrupspmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt EndGInt MItmGrupspmuInt nameStrnEditMenutextStrn&EditindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt MItmGrupspmuInt nameStrnEditUndotextStrnUndoindxInt scutStrnZbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrupspmuInt nameStrntextStrn-indxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrupspmuInt nameStrnEditCuttextStrnCutindxInt scutStrnXbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrupspmuInt nameStrnEditCopytextStrnCopyindxInt scutStrnCbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrupspmuInt nameStrn EditPastetextStrnPasteindxInt scutStrnVbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrupspmuInt nameStrn EditCleartextStrnClearindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrupspmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt EndGInt MItmGrupspmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt PadnPadn8********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjNvvQĆW0NameStrnAppContInt rEdtRect_K!eSptInt bPGpGrupPbPElGrup4scKyInt rEdtRect_K!eSptInt EndGInt EndGInt bClsInt NameStrnAppSizeInt 4SuprStrn ApplicationbNtrInt IntrStrnbApOInt PDefGrup0nameStrnMenuBarPValStrn -1135708553EndGInt PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjNv}DA97~NameStrnPOSIXExtensionsContInt rEdtRectWeSptInt bPGpGrupPbPElGrup4scKyInt rEdtRectWeSptInt EndGInt EndGInt bClsInt NameStrnPOSIXExtensionsSizeInt bNtrInt NoteGrupEncoInt nameStrnUsageflagInt sorcGrupPstsrInt stscInt ndsrInt ndscInt EncoInt ntlnStrnUsagentlnStrnMThis extends the FolderItem class with 3 methods and the String class with 1.ntlnStrnntlnStrnFolderItem.FSRef:ntlnStrnX Returns the equivalent FSRef for the FolderItem. Returns nil if the file doesn't existntlnStrnntlnStrnFolderItem.FSSpec:ntlnStrnd Returns the equivalent FSSpec for the FolderItem. Returns nil if the FolderItem points to a VolumentlnStrnntlnStrnFolderItem.POSIXPath:ntlnStrni Returns the POSIX Path for the FolderItem. Returns "" if the file doesn't exist or if an error occurredntlnStrnntlnStrnString.FolderItem:ntlnStrn Returns a FolderItem for the given POSIX path. Returns nil if the string isn't a valid path, file doesn't exist, or an error occuredntlnStrnEndGInt EndGInt NoteGrupEncoInt nameStrnCreditsflagInt sorcGrupstsrInt stscInt ndsrInt ndscInt EncoInt ntlnStrnCreditsntlnStrnCreated by Kevin BallardntlnStrn kevin@sb.orgntlnStrnhttp://www.tildesoft.comntlnStrnEndGInt EndGInt MethGrup\EncoInt nameStrn POSIXPathparmStrnExtends f As FolderItemrsltStrnStringflagInt sorcGrupstsrInt stscInt ;ndsrInt ndscInt ;EncoInt srclStrn5Function POSIXPath(Extends f As FolderItem) As StringsrclStrn#if TargetCarbonsrclStrnsrclStrndDeclare Function FSRefMakePath Lib "CarbonLib" (ref As Ptr, path As Ptr, size As Integer) As IntegersrclStrnsrclStrnDim ref, path As MemoryBlocksrclStrnDim OSStatus As IntegersrclStrnDim result As StringsrclStrnsrclStrn ref = f.FSRefsrclStrnsrclStrnIf ref <> nil ThensrclStrnG// Lets make a maximum path size of 1023 characters (that's 1024 bytes)srclStrnpath = New MemoryBlock(1024)srclStrnsrclStrn)OSStatus = FSRefMakePath(ref, path, 1024)srclStrnsrclStrnIf OSStatus = 0 ThensrclStrn // It workedsrclStrn8result = DefineEncoding(path.CString(0), Encodings.UTF8)srclStrn Return resultsrclStrnElsesrclStrn// It didn't worksrclStrn Return ""srclStrnEnd IfsrclStrnElsesrclStrnP// Try doing it for the parent. If the parent exists, we can still create a pathsrclStrnresult = f.Parent.POSIXPathsrclStrnIf result <> "" ThensrclStrn*// Add a trailing slash if it requires onesrclStrn;If result.Mid(result.Len) <> "/" Then result = result + "/"srclStrn// Add our name and return!srclStrnReturn result + f.NamesrclStrnElsesrclStrn // Oh wellsrclStrn Return ""srclStrnEnd IfsrclStrnEnd IfsrclStrnsrclStrn#endif // TargetCarbonsrclStrn End FunctionEndGInt EndGInt MethGrupEncoInt nameStrnFSSpecparmStrnExtends f As FolderItemrsltStrn MemoryBlockflagInt sorcGrupstsrInt 'stscInt (ndsrInt 'ndscInt .EncoInt srclStrn7Function FSSpec(Extends f As FolderItem) As MemoryBlocksrclStrn(// Taken from the Carbon Declare LibrarysrclStrnsrclStrn2// Created 4/6/2000 by pantarei srclStrn4// Modified 1/18/2001 by pantarei srclStrn5// Modified 10/10/2001 by pantarei srclStrn+// Added to CDL 12/15/2001 by Kevin BallardsrclStrn'// Modified 12/15/2001 by Kevin BallardsrclStrn$// Modified 7/21/02 by Kevin BallardsrclStrnsrclStrn;// By definition of an FSSpec this doesn't work on volumes.srclStrnsrclStrn// 68k CompatiblesrclStrnsrclStrn#if TargetCarbonsrclStrnsrclStrn}Declare Function FSMakeFSSpec Lib "CarbonLib" (vRefNum As Short, dirID As Integer, fileName as PString, spec As Ptr) As ShortsrclStrnsrclStrnDim OSErr As IntegersrclStrnDim spec As MemoryBlocksrclStrnsrclStrn// struct FSSpec {srclStrn// short vRefNum; // = 0 srclStrn// long parID; // = 2srclStrn2// StrFileName name;/* a Str63 on MacOS*/ // = 6srclStrn // }; // = 70srclStrnsrclStrnspec = NewMemoryBlock(70)srclStrnsrclStrnIf f.Parent <> nil ThensrclStrnfOSErr = FSMakeFSSpec(f.MacVRefNum, f.MacDirID, ConvertEncoding(f.Name, Encodings.SystemDefault), spec)srclStrn If OSErr = 0 Or OSErr = -43 ThensrclStrn Return specsrclStrnEnd IfsrclStrnEnd IfsrclStrn Return specsrclStrnsrclStrn#endif // TargetCarbonsrclStrnsrclStrnOReturn nil // fold is a Volume or FSMakeFSSpec didn't work (or it's not Carbon)srclStrn End FunctionEndGInt EndGInt MethGrup$EncoInt nameStrnFSRefparmStrnExtends f As FolderItemrsltStrn MemoryBlockflagInt sorcGrupstsrInt !stscInt 8ndsrInt !ndscInt 8EncoInt srclStrn6Function FSRef(Extends f As FolderItem) As MemoryBlocksrclStrn#if TargetCarbonsrclStrnsrclStrn#const kTextEncodingUnknown = &hFFFFsrclStrnsrclStrnDeclare Function FSMakeFSRefUnicode Lib "CarbonLib" (parentRef As Ptr, namelen As Integer, name As Ptr, textEncodingHint As Integer, ref As Ptr) As ShortsrclStrnDeclare Function FSGetVolumeInfo Lib "CarbonLib" (volume As Short, index As Integer, actualVolume As Integer, whichInfo As Integer, info As Integer, volumeName As Integer, rootDirectory As Ptr) As ShortsrclStrnsrclStrn-Dim parentRef, ref, name, leaf As MemoryBlocksrclStrn#Dim dirTree(-1), fold As FolderItemsrclStrnDim i, n, OSErr As IntegersrclStrnDim leafName As StringsrclStrnsrclStrnfold = fsrclStrnWhile fold <> nilsrclStrndirTree.Append foldsrclStrnfold = fold.ParentsrclStrnWendsrclStrnsrclStrnref = New MemoryBlock(80)srclStrn9OSErr = FSGetVolumeInfo(f.MacVRefNum, 0, 0, 0, 0, 0, ref)srclStrnIf OSErr <> 0 ThensrclStrn // Error!srclStrn Return nilsrclStrnEnd IfsrclStrnAn = UBound(dirTree) - 1 // Since we already have the volume FSRefsrclStrnFor i = n DownTo 0srclStrnfold = dirTree(i)srclStrnparentRef = refsrclStrnref = New MemoryBlock(80)srclStrn6leafName = ConvertEncoding(fold.Name, Encodings.UTF16)srclStrn&leaf = New MemoryBlock(LenB(leafName))srclStrn)leaf.StringValue(0, leaf.Size) = leafNamesrclStrnZOSErr = FSMakeFSRefUnicode(parentRef, LenB(leafName) / 2, leaf, kTextEncodingUnknown, ref)srclStrnIf OSErr <> 0 ThensrclStrn // Error!srclStrn Return nilsrclStrnEnd IfsrclStrnNextsrclStrnsrclStrn4// Ok, ref should now be an FSRef for the FolderItemsrclStrn Return refsrclStrnsrclStrn#endif // CarbonsrclStrn End FunctionEndGInt EndGInt MethGrup(EncoInt nameStrn FolderItemparmStrnExtends s As StringrsltStrn FolderItemflagInt sorcGrupstsrInt stscInt ndsrInt ndscInt EncoInt srclStrn6Function FolderItem(Extends s As String) As FolderItemsrclStrn#if TargetCarbonsrclStrnsrclStrnkDeclare Function FSPathMakeRef Lib "CarbonLib" (path As Ptr, ref As Ptr, isDirectory As Integer) As IntegersrclStrnsrclStrnDim ref, path As MemoryBlocksrclStrnDim OSStatus As IntegersrclStrnDim f As FolderItemsrclStrnsrclStrn&s = ConvertEncoding(s, Encodings.UTF8)srclStrnsrclStrn#path = New MemoryBlock(LenB(s) + 1)srclStrnpath.CString(0) = ssrclStrnsrclStrnref = New MemoryBlock(80)srclStrnsrclStrn&OSStatus = FSPathMakeRef(path, ref, 0)srclStrnIf OSStatus = 0 ThensrclStrn // it workedsrclStrn&Return ConvertFolderItemFromFSRef(ref)srclStrnElsesrclStrnL// Try stripping off the last leaf of the path and making an FSRef from thatsrclStrn9// Trim the last char off first if it is a trailing slashsrclStrn2If s.Mid(s.Len) = "/" Then s = s.Mid(1, s.Len - 1)srclStrn// To make this global variablesrclStrnHf = s.Mid(1, s.Len - s.NthField("/", s.CountFields("/")).Len).FolderItemsrclStrnIf f <> nil ThensrclStrn // It workedsrclStrn3Return f.Child(s.NthField("/", s.CountFields("/")))srclStrnElsesrclStrn // Oh wellsrclStrn Return nilsrclStrnEnd IfsrclStrnEnd IfsrclStrnsrclStrn#endif // CarbonsrclStrn End FunctionEndGInt EndGInt MethGrup(EncoInt nameStrn FolderItemparmStrnExtends mb As MemoryblockrsltStrn FolderItemflagInt sorcGrupstsrInt stscInt ndsrInt ndscInt EncoInt srclStrn 1 And dirID <> 2srclStrninfo = New MemoryBlock(144)srclStrnname = New MemoryBlock(512)srclStrnparentRef = New MemoryBlock(80)srclStrn;OSErr = FSGetCatalogInfo(ref, 12, info, name, 0, parentRef)srclStrnIf OSErr <> 0 ThensrclStrn // Error!srclStrn Return nilsrclStrnEnd IfsrclStrnSnames.Append DefineEncoding(name.StringValue(2, name.UShort(0)*2), Encodings.UTF16)srclStrnref = parentRefsrclStrndirID = info.Long(4)srclStrnWendsrclStrn]// Ok, our ref corresponds to one up from the root directory, and we have an array of stringssrclStrna// We're stopping here because when we get the volume in RB, we get the root directory from theresrclStrn:// Lets get the vrefnum and figure out what volume we havesrclStrnvRefNum = info.Short(2)srclStrnFor i = 0 To VolumeCount - 1srclStrn f = Volume(i)srclStrnIf f.MacVRefNum = vRefNum ThensrclStrn// We have our volumesrclStrnExitsrclStrnEnd IfsrclStrnNextsrclStrnIf f = nil ThensrclStrn// We couldn't find our volumesrclStrn Return nilsrclStrnEnd IfsrclStrn:// Ok, lets go up from the volume to our target FolderItemsrclStrnG// In the special case where the path points to a volume directly, thensrclStrnD// our top item is indeed the volume, and not one up from the volumesrclStrn(// So if dirID is 1, ignore the top itemsrclStrnIf dirID = 1 ThensrclStrnn = UBound(names)-1srclStrnElsesrclStrnn = UBound(names)srclStrnEnd IfsrclStrnFor i = n DownTo 0srclStrnf = f.Child(names(i))srclStrnIf f = nil ThensrclStrn// It didn't worksrclStrn Return nilsrclStrnEnd IfsrclStrnNextsrclStrnsrclStrn// We have our folderitem!srclStrnReturn fsrclStrn End FunctionEndGInt EndGInt MethGrup EncoInt nameStrnConvertFolderItemFromFSSpecparmStrnmb As MemoryBlockrsltStrn FolderItemflagInt sorcGrup stsrInt stscInt ndsrInt ndscInt EncoInt srclStrnEFunction ConvertFolderItemFromFSSpec(mb As MemoryBlock) As FolderItemsrclStrn(// Taken from the Carbon Declare LibrarysrclStrnsrclStrn2// Created 4/6/2000 by pantarei srclStrn4// Modified 1/18/2001 by pantarei srclStrn5// Modified 10/10/2001 by pantarei srclStrn$// Added 12/15/2001 By Kevin BallardsrclStrn'// Modified 12/15/2001 by Kevin BallardsrclStrnsrclStrn// 68k CompatiblesrclStrnsrclStrn#If TargetCarbonsrclStrnPDeclare Function PBGetCatInfoSync Lib "CarbonLib" (paramBlock As Ptr) As IntegersrclStrnsrclStrn)Dim i, Size, OSErr, MacVRefNum As IntegersrclStrnDim Path(0) As StringsrclStrnDim File As FolderItemsrclStrn&Dim tempPtr, paramBlock As MemoryBlocksrclStrnsrclStrnIf mb = nil ThensrclStrn Return nilsrclStrnEnd IfsrclStrnsrclStrn'struct FSSpec {srclStrn'short vRefNum; // = 0 srclStrn'long parID; // = 2srclStrn.'StrFileName name;/* a Str63 on MacOS*/ // = 6srclStrn '}; // = 70srclStrnsrclStrn // Step 1srclStrn#// Create Parameter Block by FSSpecsrclStrnsrclStrnMacVRefNum = mb.Short(0)srclStrnsrclStrn3paramBlock = NewMemoryBlock(108) // Parameter BlocksrclStrn+tempPtr = NewMemoryBlock(64) // StrFileNamesrclStrnsrclStrn"tempPtr.PString(0) = mb.PString(6)srclStrnparamBlock.Ptr(18) = tempPtrsrclStrn,paramBlock.Short(22) = mb.Short(0) //vRefNumsrclStrn(paramBlock.Long(48) = mb.Long(2) //dirIDsrclStrnparamBlock.Short(28) = 0srclStrnsrclStrn$OSErr = PBGetCatInfoSync(paramBlock)srclStrnsrclStrnIf OSErr <> 0 ThensrclStrn Return NilsrclStrnEnd IfsrclStrnsrclStrn // Step 2srclStrn!// Create path by Parameter BlocksrclStrnsrclStrn'Path(0) = paramBlock.Ptr(18).PString(0)srclStrnsrclStrn While TruesrclStrn5paramBlock.Long(48) = paramBlock.Long(100) //parDirIDsrclStrnparamBlock.Short(28) = -1srclStrn)If PBGetCatInfoSync(paramBlock) <> 0 thensrclStrnExitsrclStrnEnd IfsrclStrn,Path.Insert 0, paramBlock.Ptr(18).PString(0)srclStrnWendsrclStrnsrclStrn // Step 3srclStrn// Find Volume by MacVRefNumsrclStrn5// Avoid conflicts by multiple volumes with same namesrclStrnsrclStrn File = NilsrclStrnFor i = 0 To VolumeCount -1srclStrn)If Volume(i).MacVRefNum = MacVRefNum ThensrclStrnFile = Volume(i)srclStrnExitsrclStrnEnd IfsrclStrnNextsrclStrnsrclStrn // Step 4srclStrn// Create FolderItem by pathsrclStrnsrclStrni = 1srclStrnSize = Ubound(Path)srclStrnsrclStrn!While File <> Nil And File.ExistssrclStrnIf i > Size ThensrclStrn Return FilesrclStrnEnd ifsrclStrnFile = File.Child(Path(i))srclStrn i = i + 1srclStrnWendsrclStrnsrclStrn Return NilsrclStrnsrclStrn#endif // CArbonsrclStrn End FunctionEndGInt EndGInt IntrStrnPadnPadn4****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************EOF!