package shell32;

use strict;

require Exporter;

use wine;
use vars qw(@ISA @EXPORT @EXPORT_OK);

@ISA = qw(Exporter);
@EXPORT = qw();
@EXPORT_OK = qw();

my $module_declarations = {
    "SHRegDeleteKeyA" => ["long",  ["long", "str"]],
    "SHChangeNotifyRegister" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
    "SHChangeNotifyDeregister" => ["long",  ["long"]],
    "SHChangeNotifyUpdateEntryList" => ["long",  ["long", "long", "long", "long"]],
    "ILGetDisplayName" => ["long",  ["ptr", "str"]],
    "ILFindLastID" => ["ptr",  ["ptr"]],
    "ILRemoveLastID" => ["long",  ["ptr"]],
    "ILClone" => ["ptr",  ["ptr"]],
    "ILCloneFirst" => ["ptr",  ["ptr"]],
    "ILGlobalClone" => ["ptr",  ["ptr"]],
    "ILIsEqual" => ["long",  ["ptr", "ptr"]],
    "ILIsParent" => ["long",  ["ptr", "ptr", "long"]],
    "ILFindChild" => ["ptr",  ["ptr", "ptr"]],
    "ILCombine" => ["ptr",  ["ptr", "ptr"]],
    "ILLoadFromStream" => ["long",  ["ptr", "ptr"]],
    "ILSaveToStream" => ["long",  ["ptr", "ptr"]],
    "SHILCreateFromPath" => ["long",  ["ptr", "ptr", "ptr"]],
    "PathIsRoot" => ["long",  ["ptr"]],
    "PathBuildRoot" => ["ptr",  ["ptr", "long"]],
    "PathFindExtension" => ["ptr",  ["ptr"]],
    "PathAddBackslash" => ["ptr",  ["ptr"]],
    "PathRemoveBlanks" => ["void",  ["ptr"]],
    "PathFindFileName" => ["ptr",  ["ptr"]],
    "PathRemoveFileSpec" => ["long",  ["ptr"]],
    "PathAppend" => ["long",  ["ptr", "ptr"]],
    "PathCombine" => ["ptr",  ["ptr", "ptr", "ptr"]],
    "PathStripPath" => ["void",  ["ptr"]],
    "PathIsUNC" => ["long",  ["ptr"]],
    "PathIsRelative" => ["long",  ["ptr"]],
    "PathIsExe" => ["long",  ["ptr"]],
    "PathFileExists" => ["long",  ["ptr"]],
    "PathMatchSpec" => ["long",  ["ptr", "ptr"]],
    "PathMakeUniqueName" => ["long",  ["ptr", "long", "ptr", "ptr", "ptr"]],
    "PathSetDlgItemPath" => ["long",  ["long", "long", "ptr"]],
    "PathQualify" => ["long",  ["ptr"]],
    "PathStripToRoot" => ["long",  ["ptr"]],
    "PathResolve" => ["long",  ["ptr", "ptr", "long"]],
    "PathGetArgs" => ["ptr",  ["ptr"]],
    "DoEnvironmentSubst" => ["long",  ["ptr", "ptr"]],
    "DragAcceptFiles" => ["void",  ["long", "long"]],
    "PathQuoteSpaces" => ["ptr",  ["ptr"]],
    "PathUnquoteSpaces" => ["void",  ["ptr"]],
    "PathGetDriveNumber" => ["long",  ["ptr"]],
    "ParseField" => ["long",  ["ptr", "long", "ptr", "long"]],
    "ExitWindowsDialog" => ["void",  ["long"]],
    "RunFileDlg" => ["void",  ["long", "long", "str", "str", "str", "long"]],
    "PickIconDlg" => ["long",  ["long", "str", "long", "ptr"]],
    "GetFileNameFromBrowse" => ["long",  ["long", "str", "long", "str", "str", "str", "str"]],
    "DriveType" => ["long",  ["long"]],
    "IsNetDrive" => ["long",  ["long"]],
    "Shell_MergeMenus" => ["long",  ["long", "long", "long", "long", "long", "long"]],
    "SHGetSetSettings" => ["void",  ["long", "long", "long"]],
    "SHCreateDefClassObject" => ["long",  ["ptr", "ptr", "ptr", "ptr", "ptr"]],
    "Shell_GetImageList" => ["long",  ["ptr", "ptr"]],
    "Shell_GetCachedImageIndex" => ["long",  ["ptr", "long", "long"]],
    "SHShellFolderView_Message" => ["long",  ["long", "long", "long"]],
    "PathYetAnotherMakeUniqueName" => ["long",  ["str", "str", "str", "str"]],
    "SHMapPIDLToSystemImageListIndex" => ["long",  ["ptr", "ptr", "ptr"]],
    "OleStrToStrN" => ["long",  ["ptr", "long", "ptr", "long"]],
    "StrToOleStrN" => ["long",  ["wstr", "long", "ptr", "long"]],
    "DragFinish" => ["void",  ["long"]],
    "DragQueryFile" => ["long",  ["long", "long", "str", "long"]],
    "DragQueryFileA" => ["long",  ["long", "long", "str", "long"]],
    "CIDLData_CreateFromIDArray" => ["long",  ["ptr", "long", "ptr", "ptr"]],
    "SHRegisterDragDrop" => ["long",  ["long", "ptr"]],
    "SHRevokeDragDrop" => ["long",  ["long"]],
    "SHDoDragDrop" => ["long",  ["long", "ptr", "ptr", "long", "ptr"]],
    "SHCloneSpecialIDList" => ["ptr",  ["long", "long", "long"]],
    "PathGetShortPath" => ["ptr",  ["ptr"]],
    "SHLogILFromFSIL" => ["ptr",  ["ptr"]],
    "StrRetToStrN" => ["long",  ["ptr", "long", "ptr", "ptr"]],
    "SHWaitForFileToOpen" => ["long",  ["ptr", "long", "long"]],
    "SHGetRealIDL" => ["ptr",  ["ptr", "ptr", "long"]],
    "SetAppStartingCursor" => ["long",  ["long", "long"]],
    "SHRestricted" => ["long",  ["long"]],
    "SHCoCreateInstance" => ["long",  ["str", "ptr", "ptr", "ptr", "ptr"]],
    "SignalFileOpen" => ["long",  ["long"]],
    "FileMenu_DeleteAllItems" => ["long",  ["long"]],
    "FileMenu_DrawItem" => ["long",  ["long", "ptr"]],
    "FileMenu_FindSubMenuByPidl" => ["long",  ["long", "ptr"]],
    "FileMenu_GetLastSelectedItemPidls" => ["long",  ["long", "ptr", "ptr"]],
    "FileMenu_HandleMenuChar" => ["long",  ["long", "long"]],
    "FileMenu_InitMenuPopup" => ["long",  ["long"]],
    "FileMenu_InsertUsingPidl" => ["long",  ["long", "long", "ptr", "long", "long", "ptr"]],
    "FileMenu_Invalidate" => ["void",  ["long"]],
    "FileMenu_MeasureItem" => ["long",  ["long", "ptr"]],
    "FileMenu_ReplaceUsingPidl" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
    "FileMenu_Create" => ["long",  ["long", "long", "long", "long", "long"]],
    "FileMenu_AppendItem" => ["long",  ["long", "ptr", "long", "long", "long", "long"]],
    "FileMenu_TrackPopupMenuEx" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
    "FileMenu_DeleteItemByCmd" => ["long",  ["long", "long"]],
    "FileMenu_Destroy" => ["void",  ["long"]],
    "IsLFNDrive" => ["long",  ["str"]],
    "FileMenu_AbortInitMenu" => ["void",  []],
    "SHFlushClipboard" => ["long",  []],
    "RunDLL_CallEntry16" => ["long",  ["long", "long", "long", "long", "long"]],
    "SHFreeUnusedLibraries" => ["void",  []],
    "FileMenu_AppendFilesForPidl" => ["long",  ["long", "ptr", "long"]],
    "FileMenu_AddFilesForPidl" => ["long",  ["long", "long", "long", "ptr", "long", "long", "ptr"]],
    "SHOutOfMemoryMessageBox" => ["long",  ["long", "str", "long"]],
    "SHWinHelp" => ["long",  ["long", "long", "long", "long"]],
    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
    "DragQueryFileW" => ["long",  ["long", "long", "wstr", "long"]],
    "DragQueryPoint" => ["long",  ["long", "ptr"]],
    "DAD_SetDragImage" => ["long",  ["long", "ptr"]],
    "DAD_ShowDragImage" => ["long",  ["long"]],
    "FileMenu_DeleteItemByIndex" => ["long",  ["long", "long"]],
    "FileMenu_DeleteItemByFirstID" => ["long",  ["long", "long"]],
    "FileMenu_DeleteSeparator" => ["long",  ["long"]],
    "FileMenu_EnableItemByCmd" => ["long",  ["long", "long", "long"]],
    "FileMenu_GetItemExtent" => ["long",  ["long", "long"]],
    "PathFindOnPath" => ["long",  ["ptr", "ptr"]],
    "RLBuildListOfPaths" => ["long",  []],
    "SHCLSIDFromString" => ["long",  ["ptr", "ptr"]],
    "SHFind_InitMenuPopup" => ["ptr",  ["long", "long", "long", "long"]],
    "SHLoadOLE" => ["long",  ["long"]],
    "ILGetSize" => ["long",  ["ptr"]],
    "ILGetNext" => ["ptr",  ["ptr"]],
    "ILAppend" => ["ptr",  ["ptr", "ptr", "long"]],
    "ILFree" => ["long",  ["ptr"]],
    "ILGlobalFree" => ["void",  ["ptr"]],
    "ILCreateFromPath" => ["ptr",  ["ptr"]],
    "PathGetExtension" => ["ptr",  ["ptr", "long", "long"]],
    "PathIsDirectory" => ["long",  ["ptr"]],
    "SHRunControlPanel" => ["long",  ["long", "long"]],
    "SHSimpleIDListFromPath" => ["ptr",  ["ptr"]],
    "StrToOleStr" => ["long",  ["wstr", "ptr"]],
    "Win32DeleteFile" => ["long",  ["str"]],
    "SHCreateDirectory" => ["long",  ["ptr", "str"]],
    "CallCPLEntry16" => ["long",  ["long", "ptr", "long", "long", "long", "long"]],
    "SHAddFromPropSheetExtArray" => ["long",  ["long", "long", "long"]],
    "SHCreatePropSheetExtArray" => ["long",  ["long", "str", "long"]],
    "SHDestroyPropSheetExtArray" => ["long",  ["long"]],
    "SHReplaceFromPropSheetExtArray" => ["long",  ["long", "long", "long", "long"]],
    "PathCleanupSpec" => ["long",  ["ptr", "ptr"]],
    "SHValidateUNC" => ["long",  ["long", "long", "long"]],
    "SHCreateShellFolderViewEx" => ["long",  ["ptr", "ptr"]],
    "SHGetSpecialFolderPath" => ["long",  ["long", "ptr", "long", "long"]],
    "SHSetInstanceExplorer" => ["long",  ["ptr"]],
    "RegisterShellHook" => ["long",  ["long", "long"]],
    "ArrangeWindows" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
    "SHFree" => ["void",  ["ptr"]],
    "SHAlloc" => ["ptr",  ["long"]],
    "SHAbortInvokeCommand" => ["long",  []],
    "SHInitRestricted" => ["long",  ["str", "str"]],
    "SHGetDataFromIDListA" => ["long",  ["ptr", "ptr", "long", "ptr", "long"]],
    "SHGetDataFromIDListW" => ["long",  ["ptr", "ptr", "long", "ptr", "long"]],
    "PathParseIconLocation" => ["long",  ["ptr"]],
    "PathRemoveExtension" => ["void",  ["ptr"]],
    "PathRemoveArgs" => ["void",  ["ptr"]],
    "SheChangeDirW" => ["long",  ["wstr"]],
    "SheGetDirW" => ["long",  ["wstr", "wstr"]],
    "ShellAboutA" => ["long",  ["long", "str", "str", "long"]],
    "ShellAboutW" => ["long",  ["long", "wstr", "wstr", "long"]],
    "ShellExecuteA" => ["long",  ["long", "str", "str", "str", "str", "long"]],
    "ShellExecuteEx" => ["long",  ["ptr"]],
    "ShellExecuteExA" => ["long",  ["ptr"]],
    "ShellExecuteExW" => ["long",  ["ptr"]],
    "ShellExecuteW" => ["long",  ["long", "wstr", "wstr", "wstr", "wstr", "long"]],
    "Shell_NotifyIcon" => ["long",  ["long", "ptr"]],
    "Shell_NotifyIconA" => ["long",  ["long", "ptr"]],
    "Shell_NotifyIconW" => ["long",  ["long", "ptr"]],
    "SHRegOpenKeyA" => ["long",  ["long", "str", "ptr"]],
    "SHRegOpenKeyW" => ["long",  ["long", "wstr", "ptr"]],
    "SHRegQueryValueExA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "ptr"]],
    "SHRegQueryValueW" => ["long",  ["long", "wstr", "wstr", "ptr"]],
    "SHRegQueryValueExW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "ptr"]],
    "SHRegDeleteKeyW" => ["long",  ["long", "wstr"]],
    "SHAllocShared" => ["long",  ["ptr", "long", "long"]],
    "SHLockShared" => ["ptr",  ["long", "long"]],
    "SHUnlockShared" => ["long",  ["ptr"]],
    "SHFreeShared" => ["long",  ["long", "long"]],
    "NTSHChangeNotifyRegister" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
    "NTSHChangeNotifyDeregister" => ["long",  ["long"]],
    "SHChangeNotification_Lock" => ["long",  ["long", "long", "undef", "ptr"]],
    "SHChangeNotification_Unlock" => ["long",  ["long"]],
    "PathIsSameRoot" => ["long",  ["ptr", "ptr"]],
    "ReadCabinetState" => ["long",  ["long", "long"]],
    "WriteCabinetState" => ["long",  ["long"]],
    "PathProcessCommand" => ["long",  ["ptr", "ptr", "long", "long"]],
    "FileIconInit" => ["long",  ["long"]],
    "IsUserAdmin" => ["long",  []],
    "CommandLineToArgvW" => ["ptr",  ["wstr", "ptr"]],
    "Control_FillCache_RunDLL" => ["long",  ["long", "long", "long", "long"]],
    "Control_RunDLL" => ["void",  ["long", "long", "str", "long"]],
    "DllCanUnloadNow" => ["long",  []],
    "DllGetVersion" => ["long",  ["ptr"]],
    "DllInstall" => ["long",  ["long", "wstr"]],
    "DoEnvironmentSubstA" => ["long",  ["str", "str"]],
    "DoEnvironmentSubstW" => ["long",  ["wstr", "wstr"]],
    "DuplicateIcon" => ["long",  ["long", "long"]],
    "ExtractAssociatedIconA" => ["long",  ["long", "str", "ptr"]],
    "ExtractIconA" => ["long",  ["long", "str", "long"]],
    "ExtractIconEx" => ["long",  ["ptr", "long", "ptr", "ptr", "long"]],
    "ExtractIconExA" => ["long",  ["str", "long", "ptr", "ptr", "long"]],
    "ExtractIconExW" => ["long",  ["wstr", "long", "ptr", "ptr", "long"]],
    "ExtractIconW" => ["long",  ["long", "wstr", "long"]],
    "FindExecutableA" => ["long",  ["str", "str", "str"]],
    "FindExecutableW" => ["long",  ["wstr", "wstr", "wstr"]],
    "FreeIconList" => ["void",  ["long"]],
    "SHAddToRecentDocs" => ["long",  ["long", "ptr"]],
    "SHAppBarMessage" => ["long",  ["long", "ptr"]],
    "SHBrowseForFolder" => ["ptr",  ["ptr"]],
    "SHBrowseForFolderA" => ["ptr",  ["ptr"]],
    "SHChangeNotify" => ["void",  ["long", "long", "ptr", "ptr"]],
    "SHFileOperation" => ["long",  ["ptr"]],
    "SHFileOperationA" => ["long",  ["ptr"]],
    "SHFileOperationW" => ["long",  ["ptr"]],
    "SHGetDesktopFolder" => ["long",  ["ptr"]],
    "SHGetFileInfo" => ["long",  ["ptr", "long", "ptr", "long", "long"]],
    "SHGetFileInfoA" => ["long",  ["str", "long", "ptr", "long", "long"]],
    "SHGetFileInfoW" => ["long",  ["wstr", "long", "ptr", "long", "long"]],
    "SHGetFolderLocation" => ["long",  ["long", "long", "long", "long", "ptr"]],
    "SHGetFolderPathA" => ["long",  ["long", "long", "long", "long", "str"]],
    "SHGetFolderPathW" => ["long",  ["long", "long", "long", "long", "wstr"]],
    "SHGetInstanceExplorer" => ["long",  ["ptr"]],
    "SHGetMalloc" => ["long",  ["ptr"]],
    "SHGetPathFromIDList" => ["long",  ["ptr", "ptr"]],
    "SHGetPathFromIDListA" => ["long",  ["ptr", "str"]],
    "SHGetPathFromIDListW" => ["long",  ["ptr", "wstr"]],
    "SHGetSettings" => ["void",  ["ptr", "long"]],
    "SHGetSpecialFolderLocation" => ["long",  ["long", "long", "ptr"]],
    "SHGetSpecialFolderPathA" => ["long",  ["long", "str", "long", "long"]],
    "SHHelpShortcuts_RunDLL" => ["long",  ["long", "long", "long", "long"]],
    "SHLoadInProc" => ["long",  ["ptr"]]
};

&wine::declare("shell32",%$module_declarations);
push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
1;
