package shlwapi;

use strict;

require Exporter;

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

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

my $module_declarations = {
    "ChrCmpIA" => ["long",  ["long", "long"]],
    "ChrCmpIW" => ["long",  ["long", "long"]],
    "ColorHLSToRGB" => ["long",  ["long", "long", "long"]],
    "ColorRGBToHLS" => ["void",  ["long", "ptr", "ptr", "ptr"]],
    "DllGetVersion" => ["long",  ["ptr"]],
    "GetMenuPosFromID" => ["long",  ["long", "long"]],
    "HashData" => ["long",  ["ptr", "long", "ptr", "long"]],
    "PathAddBackslashA" => ["str",  ["str"]],
    "PathAddBackslashW" => ["wstr",  ["wstr"]],
    "PathAddExtensionA" => ["long",  ["str", "str"]],
    "PathAddExtensionW" => ["long",  ["wstr", "wstr"]],
    "PathAppendA" => ["long",  ["str", "str"]],
    "PathAppendW" => ["long",  ["wstr", "wstr"]],
    "PathBuildRootA" => ["str",  ["str", "long"]],
    "PathBuildRootW" => ["wstr",  ["wstr", "long"]],
    "PathCanonicalizeA" => ["long",  ["str", "str"]],
    "PathCanonicalizeW" => ["long",  ["wstr", "wstr"]],
    "PathCombineA" => ["str",  ["str", "str", "str"]],
    "PathCombineW" => ["wstr",  ["wstr", "wstr", "wstr"]],
    "PathCommonPrefixA" => ["long",  ["str", "str", "str"]],
    "PathCommonPrefixW" => ["long",  ["wstr", "wstr", "wstr"]],
    "PathCompactPathA" => ["long",  ["long", "str", "long"]],
    "PathCompactPathExA" => ["long",  ["str", "str", "long", "long"]],
    "PathCompactPathExW" => ["long",  ["wstr", "wstr", "long", "long"]],
    "PathCompactPathW" => ["long",  ["long", "wstr", "long"]],
    "PathCreateFromUrlA" => ["long",  ["str", "str", "ptr", "long"]],
    "PathCreateFromUrlW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
    "PathFileExistsA" => ["long",  ["str"]],
    "PathFileExistsW" => ["long",  ["wstr"]],
    "PathFindExtensionA" => ["str",  ["str"]],
    "PathFindExtensionW" => ["wstr",  ["wstr"]],
    "PathFindFileNameA" => ["str",  ["str"]],
    "PathFindFileNameW" => ["wstr",  ["wstr"]],
    "PathFindNextComponentA" => ["str",  ["str"]],
    "PathFindNextComponentW" => ["wstr",  ["wstr"]],
    "PathFindOnPathA" => ["long",  ["str", "ptr"]],
    "PathFindOnPathW" => ["long",  ["wstr", "ptr"]],
    "PathGetArgsA" => ["str",  ["str"]],
    "PathGetArgsW" => ["wstr",  ["wstr"]],
    "PathGetCharTypeA" => ["long",  ["long"]],
    "PathGetCharTypeW" => ["long",  ["long"]],
    "PathGetDriveNumberA" => ["long",  ["str"]],
    "PathGetDriveNumberW" => ["long",  ["wstr"]],
    "PathIsContentTypeA" => ["long",  ["str", "str"]],
    "PathIsContentTypeW" => ["long",  ["wstr", "wstr"]],
    "PathIsDirectoryA" => ["long",  ["str"]],
    "PathIsDirectoryW" => ["long",  ["wstr"]],
    "PathIsFileSpecA" => ["long",  ["str"]],
    "PathIsFileSpecW" => ["long",  ["wstr"]],
    "PathIsPrefixA" => ["long",  ["str", "str"]],
    "PathIsPrefixW" => ["long",  ["wstr", "wstr"]],
    "PathIsRelativeA" => ["long",  ["str"]],
    "PathIsRelativeW" => ["long",  ["wstr"]],
    "PathIsRootA" => ["long",  ["str"]],
    "PathIsRootW" => ["long",  ["wstr"]],
    "PathIsSameRootA" => ["long",  ["str", "str"]],
    "PathIsSameRootW" => ["long",  ["wstr", "wstr"]],
    "PathIsSystemFolderA" => ["long",  ["str", "long"]],
    "PathIsSystemFolderW" => ["long",  ["wstr", "long"]],
    "PathIsUNCA" => ["long",  ["str"]],
    "PathIsUNCServerA" => ["long",  ["str"]],
    "PathIsUNCServerShareA" => ["long",  ["str"]],
    "PathIsUNCServerShareW" => ["long",  ["wstr"]],
    "PathIsUNCServerW" => ["long",  ["wstr"]],
    "PathIsUNCW" => ["long",  ["wstr"]],
    "PathIsURLA" => ["long",  ["str"]],
    "PathIsURLW" => ["long",  ["wstr"]],
    "PathMakePrettyA" => ["long",  ["str"]],
    "PathMakePrettyW" => ["long",  ["wstr"]],
    "PathMakeSystemFolderA" => ["long",  ["str"]],
    "PathMakeSystemFolderW" => ["long",  ["wstr"]],
    "PathMatchSpecA" => ["long",  ["str", "str"]],
    "PathMatchSpecW" => ["long",  ["wstr", "wstr"]],
    "PathParseIconLocationA" => ["long",  ["str"]],
    "PathParseIconLocationW" => ["long",  ["wstr"]],
    "PathQuoteSpacesA" => ["str",  ["str"]],
    "PathQuoteSpacesW" => ["wstr",  ["wstr"]],
    "PathRelativePathToA" => ["long",  ["str", "str", "long", "str", "long"]],
    "PathRelativePathToW" => ["long",  ["wstr", "wstr", "long", "wstr", "long"]],
    "PathRemoveArgsA" => ["void",  ["str"]],
    "PathRemoveArgsW" => ["void",  ["wstr"]],
    "PathRemoveBackslashA" => ["str",  ["str"]],
    "PathRemoveBackslashW" => ["wstr",  ["wstr"]],
    "PathRemoveBlanksA" => ["void",  ["str"]],
    "PathRemoveBlanksW" => ["void",  ["wstr"]],
    "PathRemoveExtensionA" => ["void",  ["str"]],
    "PathRemoveExtensionW" => ["void",  ["wstr"]],
    "PathRemoveFileSpecA" => ["long",  ["str"]],
    "PathRemoveFileSpecW" => ["long",  ["wstr"]],
    "PathRenameExtensionA" => ["long",  ["str", "str"]],
    "PathRenameExtensionW" => ["long",  ["wstr", "wstr"]],
    "PathSearchAndQualifyA" => ["long",  ["str", "str", "long"]],
    "PathSearchAndQualifyW" => ["long",  ["wstr", "wstr", "long"]],
    "PathSetDlgItemPathA" => ["long",  ["long", "long", "str"]],
    "PathSetDlgItemPathW" => ["long",  ["long", "long", "wstr"]],
    "PathSkipRootA" => ["str",  ["str"]],
    "PathSkipRootW" => ["wstr",  ["wstr"]],
    "PathStripPathA" => ["void",  ["str"]],
    "PathStripPathW" => ["void",  ["wstr"]],
    "PathStripToRootA" => ["long",  ["str"]],
    "PathStripToRootW" => ["long",  ["wstr"]],
    "PathUnmakeSystemFolderA" => ["long",  ["str"]],
    "PathUnmakeSystemFolderW" => ["long",  ["wstr"]],
    "PathUnquoteSpacesA" => ["void",  ["str"]],
    "PathUnquoteSpacesW" => ["void",  ["wstr"]],
    "SHCreateShellPalette" => ["long",  ["long"]],
    "SHDeleteEmptyKeyA" => ["long",  ["long", "str"]],
    "SHDeleteEmptyKeyW" => ["long",  ["long", "wstr"]],
    "SHDeleteKeyA" => ["long",  ["long", "str"]],
    "SHDeleteKeyW" => ["long",  ["long", "wstr"]],
    "SHDeleteOrphanKeyA" => ["long",  ["long", "str"]],
    "SHDeleteOrphanKeyW" => ["long",  ["long", "wstr"]],
    "SHDeleteValueA" => ["long",  ["long", "str", "str"]],
    "SHDeleteValueW" => ["long",  ["long", "wstr", "wstr"]],
    "SHEnumKeyExA" => ["long",  ["long", "long", "str", "ptr"]],
    "SHEnumKeyExW" => ["long",  ["long", "long", "wstr", "ptr"]],
    "SHEnumValueA" => ["long",  ["long", "long", "str", "ptr", "ptr", "ptr", "ptr"]],
    "SHEnumValueW" => ["long",  ["long", "long", "wstr", "ptr", "ptr", "ptr", "ptr"]],
    "SHGetInverseCMAP" => ["long",  ["ptr", "long"]],
    "SHGetValueA" => ["long",  ["long", "str", "str", "ptr", "ptr", "ptr"]],
    "SHGetValueW" => ["long",  ["long", "wstr", "wstr", "ptr", "ptr", "ptr"]],
    "SHIsLowMemoryMachine" => ["long",  ["long"]],
    "SHOpenRegStream2A" => ["ptr",  ["long", "str", "str", "long"]],
    "SHOpenRegStream2W" => ["ptr",  ["long", "wstr", "wstr", "long"]],
    "SHOpenRegStreamA" => ["ptr",  ["long", "str", "str", "long"]],
    "SHOpenRegStreamW" => ["ptr",  ["long", "wstr", "wstr", "long"]],
    "SHQueryInfoKeyA" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
    "SHQueryInfoKeyW" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
    "SHQueryValueExA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "ptr"]],
    "SHQueryValueExW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "ptr"]],
    "SHRegCloseUSKey" => ["long",  ["long"]],
    "SHRegDuplicateHKey" => ["long",  ["long"]],
    "SHRegEnumUSKeyA" => ["long",  ["long", "long", "str", "ptr", "long"]],
    "SHRegEnumUSKeyW" => ["long",  ["long", "long", "wstr", "ptr", "long"]],
    "SHRegGetBoolUSValueA" => ["long",  ["str", "str", "long", "long"]],
    "SHRegGetBoolUSValueW" => ["long",  ["wstr", "wstr", "long", "long"]],
    "SHRegGetPathA" => ["long",  ["long", "str", "str", "str", "long"]],
    "SHRegGetPathW" => ["long",  ["long", "wstr", "wstr", "wstr", "long"]],
    "SHRegGetUSValueA" => ["long",  ["str", "str", "ptr", "ptr", "ptr", "long", "ptr", "long"]],
    "SHRegGetUSValueW" => ["long",  ["wstr", "wstr", "ptr", "ptr", "ptr", "long", "ptr", "long"]],
    "SHRegOpenUSKeyA" => ["long",  ["str", "long", "long", "ptr", "long"]],
    "SHRegOpenUSKeyW" => ["long",  ["wstr", "long", "long", "ptr", "long"]],
    "SHRegQueryInfoUSKeyA" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr", "long"]],
    "SHRegQueryInfoUSKeyW" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr", "long"]],
    "SHRegQueryUSValueA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "long", "ptr", "long"]],
    "SHRegQueryUSValueW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "long", "ptr", "long"]],
    "SHRegSetPathA" => ["long",  ["long", "str", "str", "str", "long"]],
    "SHRegSetPathW" => ["long",  ["long", "wstr", "wstr", "wstr", "long"]],
    "SHRegWriteUSValueA" => ["long",  ["long", "str", "long", "ptr", "long", "long"]],
    "SHRegWriteUSValueW" => ["long",  ["long", "wstr", "long", "ptr", "long", "long"]],
    "SHSetValueA" => ["long",  ["long", "str", "str", "long", "ptr", "long"]],
    "SHSetValueW" => ["long",  ["long", "wstr", "wstr", "long", "ptr", "long"]],
    "StrCSpnA" => ["long",  ["str", "str"]],
    "StrCSpnW" => ["long",  ["wstr", "wstr"]],
    "StrCatBuffA" => ["str",  ["str", "str", "long"]],
    "StrCatBuffW" => ["wstr",  ["wstr", "wstr", "long"]],
    "StrCatW" => ["wstr",  ["wstr", "wstr"]],
    "StrChrA" => ["str",  ["str", "long"]],
    "StrChrW" => ["wstr",  ["wstr", "long"]],
    "StrCmpIW" => ["long",  ["wstr", "wstr"]],
    "StrCmpNA" => ["long",  ["str", "str", "long"]],
    "StrCmpNIA" => ["long",  ["str", "str", "long"]],
    "StrCmpNIW" => ["long",  ["wstr", "wstr", "long"]],
    "StrCmpNW" => ["long",  ["wstr", "wstr", "long"]],
    "StrCmpW" => ["long",  ["wstr", "wstr"]],
    "StrCpyNW" => ["wstr",  ["wstr", "wstr", "long"]],
    "StrCpyW" => ["wstr",  ["wstr", "wstr"]],
    "StrDupA" => ["str",  ["str"]],
    "StrDupW" => ["wstr",  ["wstr"]],
    "StrFormatByteSizeA" => ["str",  ["long", "str", "long"]],
    "StrFormatByteSizeW" => ["wstr",  ["long", "wstr", "long"]],
    "StrNCatA" => ["str",  ["str", "str", "long"]],
    "StrNCatW" => ["wstr",  ["wstr", "wstr", "long"]],
    "StrRChrA" => ["str",  ["str", "str", "long"]],
    "StrRChrIA" => ["str",  ["str", "str", "long"]],
    "StrRChrIW" => ["wstr",  ["wstr", "wstr", "long"]],
    "StrRChrW" => ["wstr",  ["wstr", "wstr", "long"]],
    "StrRetToBufA" => ["long",  ["ptr", "ptr", "str", "long"]],
    "StrRetToBufW" => ["long",  ["ptr", "ptr", "wstr", "long"]],
    "StrStrA" => ["str",  ["str", "str"]],
    "StrStrIA" => ["str",  ["str", "str"]],
    "StrStrIW" => ["wstr",  ["wstr", "wstr"]],
    "StrStrW" => ["wstr",  ["wstr", "wstr"]],
    "StrToIntA" => ["long",  ["str"]],
    "StrToIntExA" => ["long",  ["str", "long", "ptr"]],
    "StrToIntExW" => ["long",  ["wstr", "long", "ptr"]],
    "StrToIntW" => ["long",  ["wstr"]],
    "StrTrimA" => ["long",  ["str", "str"]],
    "UrlApplySchemeW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
    "UrlCanonicalizeA" => ["long",  ["str", "str", "ptr", "long"]],
    "UrlCanonicalizeW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
    "UrlCombineA" => ["long",  ["str", "str", "str", "ptr", "long"]],
    "UrlCombineW" => ["long",  ["wstr", "wstr", "wstr", "ptr", "long"]],
    "UrlCompareA" => ["long",  ["str", "str", "long"]],
    "UrlCompareW" => ["long",  ["wstr", "wstr", "long"]],
    "UrlEscapeA" => ["long",  ["str", "str", "ptr", "long"]],
    "UrlEscapeW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
    "UrlGetLocationA" => ["str",  ["str"]],
    "UrlGetLocationW" => ["wstr",  ["wstr"]],
    "UrlGetPartA" => ["long",  ["str", "str", "ptr", "long", "long"]],
    "UrlGetPartW" => ["long",  ["wstr", "wstr", "ptr", "long", "long"]],
    "UrlHashA" => ["long",  ["str", "ptr", "long"]],
    "UrlIsA" => ["long",  ["str", "long"]],
    "UrlIsNoHistoryA" => ["long",  ["str"]],
    "UrlIsNoHistoryW" => ["long",  ["wstr"]],
    "UrlIsOpaqueA" => ["long",  ["str"]],
    "UrlIsOpaqueW" => ["long",  ["wstr"]],
    "UrlIsW" => ["long",  ["wstr", "long"]],
    "UrlUnescapeA" => ["long",  ["str", "str", "ptr", "long"]],
    "UrlUnescapeW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
    "_SHGetInstanceExplorer\@4" => ["long",  ["ptr"]]
};

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