64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2010 John Benediktsson
 | 
						|
! See http://factorcode.org/license.txt for BSD license
 | 
						|
 | 
						|
USING: alien.c-types alien.strings alien.syntax classes.struct
 | 
						|
core-foundation io.encodings.utf8 io.files.trash kernel system ;
 | 
						|
 | 
						|
IN: io.files.trash.macosx
 | 
						|
 | 
						|
<PRIVATE
 | 
						|
 | 
						|
STRUCT: FSRef
 | 
						|
    { hidden UInt8[80] } ;
 | 
						|
 | 
						|
TYPEDEF: SInt32 OSStatus
 | 
						|
 | 
						|
TYPEDEF: UInt32 OptionBits
 | 
						|
 | 
						|
CONSTANT: noErr 0
 | 
						|
 | 
						|
CONSTANT: kFSFileOperationDefaultOptions 0x00
 | 
						|
CONSTANT: kFSFileOperationOverwrite 0x01
 | 
						|
CONSTANT: kFSFileOperationSkipSourcePermissionErrors 0x02
 | 
						|
CONSTANT: kFSFileOperationDoNotMoveAcrossVolumes 0x04
 | 
						|
CONSTANT: kFSFileOperationSkipPreflight 0x08
 | 
						|
 | 
						|
CONSTANT: kFSPathMakeRefDefaultOptions 0x00
 | 
						|
CONSTANT: kFSPathMakeRefDoNotFollowLeafSymlink 0x01
 | 
						|
 | 
						|
FUNCTION: OSStatus FSMoveObjectToTrashSync (
 | 
						|
    FSRef* source,
 | 
						|
    FSRef* target,
 | 
						|
    OptionBits options
 | 
						|
)
 | 
						|
 | 
						|
FUNCTION: char* GetMacOSStatusCommentString (
 | 
						|
    OSStatus err
 | 
						|
)
 | 
						|
 | 
						|
FUNCTION: OSStatus FSPathMakeRefWithOptions (
 | 
						|
    UInt8* path,
 | 
						|
    OptionBits options,
 | 
						|
    FSRef* ref,
 | 
						|
    Boolean* isDirectory
 | 
						|
)
 | 
						|
 | 
						|
: check-err ( err -- )
 | 
						|
    dup noErr = [ drop ] [
 | 
						|
        GetMacOSStatusCommentString utf8 alien>string throw
 | 
						|
    ] if ;
 | 
						|
 | 
						|
! FIXME: check isDirectory?
 | 
						|
 | 
						|
: <fs-ref> ( path -- fs-ref )
 | 
						|
    utf8 string>alien
 | 
						|
    kFSPathMakeRefDoNotFollowLeafSymlink
 | 
						|
    FSRef <struct>
 | 
						|
    [ f FSPathMakeRefWithOptions check-err ] keep ;
 | 
						|
 | 
						|
PRIVATE>
 | 
						|
 | 
						|
M: macosx send-to-trash ( path -- )
 | 
						|
    <fs-ref> f kFSFileOperationDefaultOptions
 | 
						|
    FSMoveObjectToTrashSync check-err ;
 |