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 HEX: 0001
30 CONSTANT: FO_COPY HEX: 0002
31 CONSTANT: FO_DELETE HEX: 0003
32 CONSTANT: FO_RENAME HEX: 0004
34 CONSTANT: FOF_MULTIDESTFILES HEX: 0001
35 CONSTANT: FOF_CONFIRMMOUSE HEX: 0002
36 CONSTANT: FOF_SILENT HEX: 0004
37 CONSTANT: FOF_RENAMEONCOLLISION HEX: 0008
38 CONSTANT: FOF_NOCONFIRMATION HEX: 0010
39 CONSTANT: FOF_WANTMAPPINGHANDLE HEX: 0020
40 CONSTANT: FOF_ALLOWUNDO HEX: 0040
41 CONSTANT: FOF_FILESONLY HEX: 0080
42 CONSTANT: FOF_SIMPLEPROGRESS HEX: 0100
43 CONSTANT: FOF_NOCONFIRMMKDIR HEX: 0200
44 CONSTANT: FOF_NOERRORUI HEX: 0400
45 CONSTANT: FOF_NOCOPYSECURITYATTRIBS HEX: 0800
46 CONSTANT: FOF_NORECURSION HEX: 1000
47 CONSTANT: FOF_NO_CONNECTED_ELEMENTS HEX: 2000
48 CONSTANT: FOF_WANTNUKEWARNING HEX: 4000
49 CONSTANT: FOF_NORECURSEREPARSE HEX: 8000
53 M: windows send-to-trash ( path -- )
55 utf16n 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