-USING: file-picker windows.shell32 windows.types ;
+USING: accessors alien.c-types alien.data alien.strings
+alien.syntax classes.struct destructors file-picker
+io.encodings.string io.encodings.utf8 kernel libc literals math
+system windows windows.kernel32 windows.shell32 windows.types
+windows.user32 ;
 IN: file-picker.windows
-
 LIBRARY: shell32
 
 TYPEDEF: void* PIDLIST_ABSOLUTE
+TYPEDEF: void* PCIDLIST_ABSOLUTE
 TYPEDEF: void* BFFCALLBACK
 
 FUNCTION: HRESULT SHGetFolderLocation (



M: windows open-file-dialog
    BROWSEINFO <struct>
        GetDesktopWindow >>hwndOwner
        0 CSIDL_PERSONAL 0 0 SHGetFolderLocation >>pidlRoot
        "Select a file or folder" >>lpszTitle
        BIF_BROWSEINCLUDEFILES >>ulFlags
    SHBrowseForFolder [
        void* <ref> [ SHGetPathFromIDList ] keep
        alien>native-string
    ] [
        f
    ] if* ;

M: windows save-file-dialog ;

  { ulFlags UINT }
  { lpfn BFFCALLBACK }
  { lParam LPARAM }
  { iImage int } ;

CONSTANT: BIF_RETURNONLYFSDIRS 0x00000001
CONSTANT: BIF_DONTGOBELOWDOMAIN 0x00000002
