1 ! Copyright (C) 2010 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
4 USING: accessors alien.c-types alien.data alien.strings
5 alien.syntax classes.struct destructors kernel
6 io.encodings.utf16n io.files.trash libc math sequences system
9 IN: io.files.trash.windows
15 TYPEDEF: WORD FILEOP_FLAGS
17 PACKED-STRUCT: SHFILEOPSTRUCTW
22 { fFlags FILEOP_FLAGS }
23 { fAnyOperationsAborted BOOL }
24 { hNameMappings LPVOID }
25 { lpszProgressTitle LPCWSTR } ;
27 FUNCTION: int SHFileOperationW ( SHFILEOPSTRUCTW* lpFileOp ) ;
29 CONSTANT: FO_MOVE 0x0001
30 CONSTANT: FO_COPY 0x0002
31 CONSTANT: FO_DELETE 0x0003
32 CONSTANT: FO_RENAME 0x0004
34 CONSTANT: FOF_MULTIDESTFILES 0x0001
35 CONSTANT: FOF_CONFIRMMOUSE 0x0002
36 CONSTANT: FOF_SILENT 0x0004
37 CONSTANT: FOF_RENAMEONCOLLISION 0x0008
38 CONSTANT: FOF_NOCONFIRMATION 0x0010
39 CONSTANT: FOF_WANTMAPPINGHANDLE 0x0020
40 CONSTANT: FOF_ALLOWUNDO 0x0040
41 CONSTANT: FOF_FILESONLY 0x0080
42 CONSTANT: FOF_SIMPLEPROGRESS 0x0100
43 CONSTANT: FOF_NOCONFIRMMKDIR 0x0200
44 CONSTANT: FOF_NOERRORUI 0x0400
45 CONSTANT: FOF_NOCOPYSECURITYATTRIBS 0x0800
46 CONSTANT: FOF_NORECURSION 0x1000
47 CONSTANT: FOF_NO_CONNECTED_ELEMENTS 0x2000
48 CONSTANT: FOF_WANTNUKEWARNING 0x4000
49 CONSTANT: FOF_NORECURSEREPARSE 0x8000
53 M: windows send-to-trash ( path -- )
55 native-string>alien B{ 0 0 } append
56 malloc-byte-array &free
58 SHFILEOPSTRUCTW <struct>
64 FOF_NOCONFIRMATION bitor
66 FOF_SILENT bitor >>fFlags
68 SHFileOperationW [ throw ] unless-zero