]> gitweb.factorcode.org Git - factor.git/blob - extra/io/files/trash/windows/windows.factor
use radix literals
[factor.git] / extra / io / files / trash / windows / windows.factor
1 ! Copyright (C) 2010 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
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
7 windows.types ;
8
9 IN: io.files.trash.windows
10
11 <PRIVATE
12
13 LIBRARY: shell32
14
15 TYPEDEF: WORD FILEOP_FLAGS
16
17 PACKED-STRUCT: SHFILEOPSTRUCTW
18     { hwnd HWND }
19     { wFunc UINT }
20     { pFrom LPCWSTR* }
21     { pTo LPCWSTR* }
22     { fFlags FILEOP_FLAGS }
23     { fAnyOperationsAborted BOOL }
24     { hNameMappings LPVOID }
25     { lpszProgressTitle LPCWSTR } ;
26
27 FUNCTION: int SHFileOperationW ( SHFILEOPSTRUCTW* lpFileOp ) ;
28
29 CONSTANT: FO_MOVE 0x0001
30 CONSTANT: FO_COPY 0x0002
31 CONSTANT: FO_DELETE 0x0003
32 CONSTANT: FO_RENAME 0x0004
33
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
50
51 PRIVATE>
52
53 M: windows send-to-trash ( path -- )
54     [
55         utf16n string>alien B{ 0 0 } append
56         malloc-byte-array &free
57
58         SHFILEOPSTRUCTW <struct>
59             f >>hwnd
60             FO_DELETE >>wFunc
61             swap >>pFrom
62             f >>pTo
63             FOF_ALLOWUNDO
64             FOF_NOCONFIRMATION bitor
65             FOF_NOERRORUI bitor
66             FOF_SILENT bitor >>fFlags
67
68         SHFileOperationW [ throw ] unless-zero
69
70     ] with-destructors ;
71
72
73