factor/extra/io/files/trash/windows/windows.factor

74 lines
1.8 KiB
Factor
Raw Normal View History

! Copyright (C) 2010 John Benediktsson
! See http://factorcode.org/license.txt for BSD license
USING: accessors alien.c-types alien.data alien.strings
alien.syntax classes.struct destructors kernel
io.encodings.utf16n io.files.trash libc math sequences system
windows.types ;
2011-08-19 17:31:19 -04:00
IN: io.files.trash.windows
<PRIVATE
LIBRARY: shell32
TYPEDEF: WORD FILEOP_FLAGS
PACKED-STRUCT: SHFILEOPSTRUCTW
{ hwnd HWND }
{ wFunc UINT }
{ pFrom LPCWSTR* }
{ pTo LPCWSTR* }
{ fFlags FILEOP_FLAGS }
{ fAnyOperationsAborted BOOL }
{ hNameMappings LPVOID }
{ lpszProgressTitle LPCWSTR } ;
FUNCTION: int SHFileOperationW ( SHFILEOPSTRUCTW* lpFileOp ) ;
2011-11-23 21:49:33 -05:00
CONSTANT: FO_MOVE 0x0001
CONSTANT: FO_COPY 0x0002
CONSTANT: FO_DELETE 0x0003
CONSTANT: FO_RENAME 0x0004
CONSTANT: FOF_MULTIDESTFILES 0x0001
CONSTANT: FOF_CONFIRMMOUSE 0x0002
CONSTANT: FOF_SILENT 0x0004
CONSTANT: FOF_RENAMEONCOLLISION 0x0008
CONSTANT: FOF_NOCONFIRMATION 0x0010
CONSTANT: FOF_WANTMAPPINGHANDLE 0x0020
CONSTANT: FOF_ALLOWUNDO 0x0040
CONSTANT: FOF_FILESONLY 0x0080
CONSTANT: FOF_SIMPLEPROGRESS 0x0100
CONSTANT: FOF_NOCONFIRMMKDIR 0x0200
CONSTANT: FOF_NOERRORUI 0x0400
CONSTANT: FOF_NOCOPYSECURITYATTRIBS 0x0800
CONSTANT: FOF_NORECURSION 0x1000
CONSTANT: FOF_NO_CONNECTED_ELEMENTS 0x2000
CONSTANT: FOF_WANTNUKEWARNING 0x4000
CONSTANT: FOF_NORECURSEREPARSE 0x8000
PRIVATE>
M: windows send-to-trash ( path -- )
[
utf16n string>alien B{ 0 0 } append
malloc-byte-array &free
SHFILEOPSTRUCTW <struct>
f >>hwnd
FO_DELETE >>wFunc
swap >>pFrom
f >>pTo
FOF_ALLOWUNDO
FOF_NOCONFIRMATION bitor
FOF_NOERRORUI bitor
FOF_SILENT bitor >>fFlags
SHFileOperationW [ throw ] unless-zero
] with-destructors ;